{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a class=\"anchor\" id=\"0\"></a>\n",
    "# **Support Vector Machines Classifier Tutorial with Python** \n",
    "\n",
    "Hello friends,\n",
    "\n",
    "Support Vector Machines (SVMs in short) are supervised machine learning algorithms that are used for classification and regression purposes. In this kernel, I build a Support Vector Machines classifier to classify a Pulsar star. I have used the **Predicting a Pulsar Star** dataset for this project. \n",
    "\n",
    "So, let's get started."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**As always, I hope you find this kernel useful and your <font color=\"red\"><b>UPVOTES</b></font> would be highly appreciated**."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a class=\"anchor\" id=\"0.1\"></a>\n",
    "# **Table of Contents**\n",
    "\n",
    "\n",
    "1.\t[Introduction to Support Vector Machines](#1)\n",
    "2.\t[Support Vector Machines intuition](#2)\n",
    "3.\t[Kernel trick](#3)\n",
    "4.\t[SVM Scikit-Learn libraries](#4)\n",
    "5.\t[Dataset description](#5)\n",
    "6.\t[Import libraries](#6)\n",
    "7.\t[Import dataset](#7)\n",
    "8.\t[Exploratory data analysis](#8)\n",
    "9.\t[Declare feature vector and target variable](#9)\n",
    "10.\t[Split data into separate training and test set](#10)\n",
    "11.\t[Feature scaling](#11)\n",
    "12.\t[Run SVM with default hyperparameters](#12)\n",
    "13.\t[Run SVM with linear kernel](#13)\n",
    "14.\t[Run SVM with polynomial kernel](#14)\n",
    "15.\t[Run SVM with sigmoid kernel](#15)\n",
    "16.\t[Confusion matrix](#16)\n",
    "17.\t[Classification metrices](#17)\n",
    "18.\t[ROC - AUC](#18)\n",
    "19.\t[Stratified k-fold Cross Validation with shuffle split](#19)\n",
    "20.\t[Hyperparameter optimization using GridSearch CV](#20)\n",
    "21.\t[Results and conclusion](#21)\n",
    "22. [References](#22)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **1. Introduction to Support Vector Machines** <a class=\"anchor\" id=\"1\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "**Support Vector Machines** (SVMs in short) are machine learning algorithms that are used for classification and regression purposes. SVMs are one of the powerful machine learning algorithms for classification, regression and outlier detection purposes. An SVM classifier builds a model that assigns new data points to one of the given categories. Thus, it can be viewed as a non-probabilistic binary linear classifier.\n",
    "\n",
    "The original SVM algorithm was developed by Vladimir N Vapnik and Alexey Ya. Chervonenkis in 1963. At that time, the algorithm was in early stages. The only possibility is to draw hyperplanes for linear classifier. In 1992, Bernhard E. Boser, Isabelle M Guyon and Vladimir N Vapnik suggested a way to create non-linear classifiers by applying the kernel trick to maximum-margin hyperplanes. The current standard was proposed by Corinna Cortes and Vapnik in 1993 and published in 1995.\n",
    "\n",
    "SVMs can be used for linear classification purposes. In addition to performing linear classification, SVMs can efficiently perform a non-linear classification using the **kernel trick**. It enable us to implicitly map the inputs into high dimensional feature spaces.\n",
    "\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **2. Support Vector Machines intuition** <a class=\"anchor\" id=\"2\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "Now, we should be familiar with some SVM terminology. \n",
    "\n",
    "\n",
    "### Hyperplane\n",
    "\n",
    "A hyperplane is a decision boundary which separates between given set of data points having different class labels. The SVM classifier separates data points using a hyperplane with the maximum amount of margin. This hyperplane is known as the `maximum margin hyperplane` and the linear classifier it defines is known as the `maximum margin classifier`.\n",
    "\n",
    "\n",
    "### Support Vectors\n",
    "\n",
    "Support vectors are the sample data points, which are closest to the hyperplane.  These data points will define the separating line or hyperplane better by calculating margins.\n",
    "\n",
    "\n",
    "### Margin\n",
    "\n",
    "A margin is a separation gap between the two lines on the closest data points. It is calculated as the perpendicular distance from the line to support vectors or closest data points. In SVMs, we try to maximize this separation gap so that we get maximum margin.\n",
    "\n",
    "The following diagram illustrates these concepts visually.\n",
    "\n",
    "\n",
    "### Margin in SVM\n",
    "\n",
    "![Margin in SVM](https://static.wixstatic.com/media/8f929f_7ecacdcf69d2450087cb4a898ef90837~mv2.png)\n",
    "\n",
    "\n",
    "### SVM Under the hood\n",
    "\n",
    "In SVMs, our main objective is to select a hyperplane with the maximum possible margin between support vectors in the given dataset. SVM searches for the maximum margin hyperplane in the following 2 step process –\n",
    "\n",
    "\n",
    "1.\tGenerate hyperplanes which segregates the classes in the best possible way. There are many hyperplanes that might classify the data. We should look for the best hyperplane that represents the largest separation, or margin, between the two classes.\n",
    "\n",
    "2.\tSo, we choose the hyperplane so that distance from it to the support vectors on each side is maximized. If such a hyperplane exists, it is known as the **maximum margin hyperplane** and the linear classifier it defines is known as a **maximum margin classifier**. \n",
    "\n",
    "\n",
    "The following diagram illustrates the concept of **maximum margin** and **maximum margin hyperplane** in a clear manner.\n",
    "\n",
    "\n",
    "### Maximum margin hyperplane\n",
    "\n",
    "![Maximum margin hyperplane](https://static.packt-cdn.com/products/9781783555130/graphics/3547_03_07.jpg)\n",
    "\n",
    "\n",
    "\n",
    "### Problem with dispersed datasets\n",
    "\n",
    "\n",
    "Sometimes, the sample data points are so dispersed that it is not possible to separate them using a linear hyperplane. \n",
    "In such a situation, SVMs uses a `kernel trick` to transform the input space to a higher dimensional space as shown in the diagram below. It uses a mapping function to transform the 2-D input space into the 3-D input space. Now, we can easily segregate the data points using linear separation.\n",
    "\n",
    "\n",
    "### Kernel trick - transformation of input space to higher dimensional space\n",
    "\n",
    "![Kernel trick](http://www.aionlinecourse.com/uploads/tutorials/2019/07/11_21_kernel_svm_3.png)\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **3. Kernel trick** <a class=\"anchor\" id=\"3\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "In practice, SVM algorithm is implemented using a `kernel`. It uses a technique called the `kernel trick`. In simple words, a `kernel` is just a function that maps the data to a higher dimension where data is separable. A kernel transforms a low-dimensional input data space into a higher dimensional space. So, it converts non-linear separable problems to linear separable problems by adding more dimensions to it. Thus, the kernel trick helps us to build a more accurate classifier. Hence, it is useful in non-linear separation problems."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can define a kernel function as follows-\n",
    "\n",
    "\n",
    "### Kernel function\n",
    "\n",
    "![Kernel function](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTodZptqcRor0LGo8Qn7_kJB9n9BACMt6jgIPZ4C3g_rgh_uSRZLQ&s)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the context of SVMs, there are 4 popular kernels – `Linear kernel`,`Polynomial kernel`,`Radial Basis Function (RBF) kernel` (also called Gaussian kernel) and `Sigmoid kernel`. These are described below -"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## **3.1 Linear kernel**\n",
    "\n",
    "In linear kernel, the kernel function takes the form of a linear function as follows-\n",
    "\n",
    "**linear kernel : K(xi , xj ) = xiT xj**\n",
    "\n",
    "Linear kernel is used when the data is linearly separable. It means that data can be separated using a single line. It is one of the most common kernels to be used. It is mostly used when there are large number of features in a dataset. Linear kernel is often used for text classification purposes.\n",
    "\n",
    "Training with a linear kernel is usually faster, because we only need to optimize the C regularization parameter. When training with other kernels, we also need to optimize the γ parameter. So, performing a grid search will usually take more time.\n",
    "\n",
    "Linear kernel can be visualized with the following figure.\n",
    "\n",
    "### Linear Kernel\n",
    "\n",
    "![Linear Kernel](https://scikit-learn.org/stable/_images/sphx_glr_plot_svm_kernels_thumb.png)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## **3.2 Polynomial Kernel**\n",
    "\n",
    "Polynomial kernel represents the similarity of vectors (training samples) in a feature space over polynomials of the original variables. The polynomial kernel looks not only at the given features of input samples to determine their similarity, but also combinations of the input samples.\n",
    "\n",
    "For degree-d polynomials, the polynomial kernel is defined as follows –\n",
    "\n",
    "**Polynomial kernel : K(xi , xj ) = (γxiT xj + r)d , γ > 0**\n",
    "\n",
    "Polynomial kernel is very popular in Natural Language Processing. The most common degree is d = 2 (quadratic), since larger degrees tend to overfit on NLP problems. It can be visualized with the following diagram.\n",
    "\n",
    "### Polynomial Kernel\n",
    "\n",
    "![Polynomial Kernel](https://www.researchgate.net/profile/Cheng_Soon_Ong/publication/23442384/figure/fig12/AS:341444054274063@1458418014823/The-effect-of-the-degree-of-a-polynomial-kernel-The-polynomial-kernel-of-degree-1-leads.png)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## **3.3 Radial Basis Function Kernel**\n",
    "\n",
    "Radial basis function kernel is a general purpose kernel. It is used when we have no prior knowledge about the data. The RBF kernel on two samples x and y is defined by the following equation –\n",
    "\n",
    "\n",
    "### Radial Basis Function kernel\n",
    "\n",
    "![RBK Kernel]()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following diagram demonstrates the SVM classification with rbf kernel.\n",
    "\n",
    "### SVM Classification with rbf kernel\n",
    "\n",
    "![SVM Classification with rbf kernel](https://www.researchgate.net/profile/Periklis_Gogas/publication/286180566/figure/fig5/AS:304327777374210@1449568804246/An-example-of-an-SVM-classification-using-the-RBF-kernel-The-two-classes-are-separated.png)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## **3.4 Sigmoid kernel**\n",
    "\n",
    "Sigmoid kernel has its origin in neural networks. We can use it as the proxy for neural networks. Sigmoid kernel is given by the following equation –\n",
    "\n",
    "**sigmoid kernel : k (x, y) = tanh(αxTy + c)**"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sigmoid kernel can be visualized with the following diagram-\n",
    "\n",
    "### Sigmoid kernel\n",
    "\n",
    "![Sigmoid kernel](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTKeXbOIlniBXYwMYlEYLKPwZZg8vFU1wVm3RWMACjVcT4iBVDy&s)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **4. SVM Scikit-Learn libraries** <a class=\"anchor\" id=\"4\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "Scikit-Learn provides useful libraries to implement Support Vector Machine algorithm on a dataset. There are many libraries that can help us to implement SVM smoothly. We just need to call the library with parameters that suit to our needs. In this project, I am dealing with a classification task. So, I will mention the Scikit-Learn libraries for SVM classification purposes.\n",
    "\n",
    "First, there is a **LinearSVC()** classifier. As the name suggests, this classifier uses only linear kernel. In LinearSVC() classifier, we don’t pass the value of kernel since it is used only for linear classification purposes.\n",
    "\n",
    "Scikit-Learn provides two other classifiers - **SVC()** and **NuSVC()** which are used for classification purposes. These classifiers are mostly similar with some difference in parameters. **NuSVC()** is similar to **SVC()** but uses a parameter to control the number of support vectors. We pass the values of kernel, gamma and C along with other parameters. By default kernel parameter uses rbf as its value but we can pass values like poly, linear, sigmoid or callable function."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **5. Dataset description** <a class=\"anchor\" id=\"5\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "I have used the **Predicting a Pulsar Star** dataset for this project.\n",
    "\n",
    "Pulsars are a rare type of Neutron star that produce radio emission detectable here on Earth. They are of considerable scientific interest as probes of space-time, the inter-stellar medium, and states of matter. Classification algorithms in particular are being adopted, which treat the data sets as binary classification problems. Here the legitimate pulsar examples form  minority positive class and spurious examples form the majority negative class.\n",
    "\n",
    "The data set shared here contains 16,259 spurious examples caused by RFI/noise, and 1,639 real pulsar examples. Each row lists the variables first, and the class label is the final entry. The class labels used are 0 (negative) and 1 (positive).\n",
    "\n",
    "\n",
    "### Attribute Information:\n",
    "\n",
    "\n",
    "Each candidate is described by 8 continuous variables, and a single class variable. The first four are simple statistics obtained from the integrated pulse profile. The remaining four variables are similarly obtained from the DM-SNR curve . These are summarised below:\n",
    "\n",
    "1. Mean of the integrated profile.\n",
    "\n",
    "2. Standard deviation of the integrated profile.\n",
    "\n",
    "3. Excess kurtosis of the integrated profile.\n",
    "\n",
    "4. Skewness of the integrated profile.\n",
    "\n",
    "5. Mean of the DM-SNR curve.\n",
    "\n",
    "6. Standard deviation of the DM-SNR curve.\n",
    "\n",
    "7. Excess kurtosis of the DM-SNR curve.\n",
    "\n",
    "8. Skewness of the DM-SNR curve.\n",
    "\n",
    "9. Class"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **6. Import libraries** <a class=\"anchor\" id=\"6\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "I will start off by importing the required Python libraries."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".\\8-Support-Vector-Machines.pptx\n",
      ".\\pulsar_stars.csv\n",
      ".\\svm-classifier-tutorial.ipynb\n",
      ".\\svm.py\n",
      ".\\~$8-Support-Vector-Machines.pptx\n",
      ".\\支持向量机备课稿.md\n"
     ]
    }
   ],
   "source": [
    "# This Python 3 environment comes with many helpful analytics libraries installed\n",
    "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n",
    "# For example, here's several helpful packages to load in \n",
    "\n",
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
    "import matplotlib.pyplot as plt # for data visualization\n",
    "import seaborn as sns # for statistical data visualization\n",
    "%matplotlib inline\n",
    "\n",
    "# Input data files are available in the \"../input/\" directory.\n",
    "# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n",
    "\n",
    "import os\n",
    "# for dirname, _, filenames in os.walk('/kaggle/input'):\n",
    "for dirname, _, filenames in os.walk('.'):\n",
    "    for filename in filenames:\n",
    "        print(os.path.join(dirname, filename))\n",
    "\n",
    "# Any results you write to the current directory are saved as output.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **7.Import dataset** <a class=\"anchor\" id=\"7\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pulsar_stars  脉冲星\n",
    "#data = '/kaggle/input/predicting-a-pulsar-star/pulsar_stars.csv'\n",
    "data = './pulsar_stars.csv'\n",
    "\n",
    "df = pd.read_csv(data)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **8. Exploratory data analysis** <a class=\"anchor\" id=\"8\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "Now, I will explore the data to gain insights about the data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(17898, 9)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view dimensions of dataset\n",
    "\n",
    "df.shape"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are 17898 instances and 9 variables in the data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Mean of the integrated profile</th>\n",
       "      <th>Standard deviation of the integrated profile</th>\n",
       "      <th>Excess kurtosis of the integrated profile</th>\n",
       "      <th>Skewness of the integrated profile</th>\n",
       "      <th>Mean of the DM-SNR curve</th>\n",
       "      <th>Standard deviation of the DM-SNR curve</th>\n",
       "      <th>Excess kurtosis of the DM-SNR curve</th>\n",
       "      <th>Skewness of the DM-SNR curve</th>\n",
       "      <th>target_class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>140.562500</td>\n",
       "      <td>55.683782</td>\n",
       "      <td>-0.234571</td>\n",
       "      <td>-0.699648</td>\n",
       "      <td>3.199833</td>\n",
       "      <td>19.110426</td>\n",
       "      <td>7.975532</td>\n",
       "      <td>74.242225</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>102.507812</td>\n",
       "      <td>58.882430</td>\n",
       "      <td>0.465318</td>\n",
       "      <td>-0.515088</td>\n",
       "      <td>1.677258</td>\n",
       "      <td>14.860146</td>\n",
       "      <td>10.576487</td>\n",
       "      <td>127.393580</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>103.015625</td>\n",
       "      <td>39.341649</td>\n",
       "      <td>0.323328</td>\n",
       "      <td>1.051164</td>\n",
       "      <td>3.121237</td>\n",
       "      <td>21.744669</td>\n",
       "      <td>7.735822</td>\n",
       "      <td>63.171909</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>136.750000</td>\n",
       "      <td>57.178449</td>\n",
       "      <td>-0.068415</td>\n",
       "      <td>-0.636238</td>\n",
       "      <td>3.642977</td>\n",
       "      <td>20.959280</td>\n",
       "      <td>6.896499</td>\n",
       "      <td>53.593661</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>88.726562</td>\n",
       "      <td>40.672225</td>\n",
       "      <td>0.600866</td>\n",
       "      <td>1.123492</td>\n",
       "      <td>1.178930</td>\n",
       "      <td>11.468720</td>\n",
       "      <td>14.269573</td>\n",
       "      <td>252.567306</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Mean of the integrated profile  \\\n",
       "0                       140.562500   \n",
       "1                       102.507812   \n",
       "2                       103.015625   \n",
       "3                       136.750000   \n",
       "4                        88.726562   \n",
       "\n",
       "    Standard deviation of the integrated profile  \\\n",
       "0                                      55.683782   \n",
       "1                                      58.882430   \n",
       "2                                      39.341649   \n",
       "3                                      57.178449   \n",
       "4                                      40.672225   \n",
       "\n",
       "    Excess kurtosis of the integrated profile  \\\n",
       "0                                   -0.234571   \n",
       "1                                    0.465318   \n",
       "2                                    0.323328   \n",
       "3                                   -0.068415   \n",
       "4                                    0.600866   \n",
       "\n",
       "    Skewness of the integrated profile   Mean of the DM-SNR curve  \\\n",
       "0                            -0.699648                   3.199833   \n",
       "1                            -0.515088                   1.677258   \n",
       "2                             1.051164                   3.121237   \n",
       "3                            -0.636238                   3.642977   \n",
       "4                             1.123492                   1.178930   \n",
       "\n",
       "    Standard deviation of the DM-SNR curve  \\\n",
       "0                                19.110426   \n",
       "1                                14.860146   \n",
       "2                                21.744669   \n",
       "3                                20.959280   \n",
       "4                                11.468720   \n",
       "\n",
       "    Excess kurtosis of the DM-SNR curve   Skewness of the DM-SNR curve  \\\n",
       "0                              7.975532                      74.242225   \n",
       "1                             10.576487                     127.393580   \n",
       "2                              7.735822                      63.171909   \n",
       "3                              6.896499                      53.593661   \n",
       "4                             14.269573                     252.567306   \n",
       "\n",
       "   target_class  \n",
       "0             0  \n",
       "1             0  \n",
       "2             0  \n",
       "3             0  \n",
       "4             0  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's preview the dataset\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are 9 variables in the dataset. 8 are continuous variables and 1 is discrete variable. The discrete variable is `target_class` variable. It is also the target variable.\n",
    "\n",
    "\n",
    "Now, I will view the column names to check for leading and trailing spaces."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([' Mean of the integrated profile',\n",
       "       ' Standard deviation of the integrated profile',\n",
       "       ' Excess kurtosis of the integrated profile',\n",
       "       ' Skewness of the integrated profile', ' Mean of the DM-SNR curve',\n",
       "       ' Standard deviation of the DM-SNR curve',\n",
       "       ' Excess kurtosis of the DM-SNR curve', ' Skewness of the DM-SNR curve',\n",
       "       'target_class'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view the column names of the dataframe\n",
    "\n",
    "col_names = df.columns\n",
    "\n",
    "col_names"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are leading spaces (spaces at the start of the string name) in the dataframe. So, I will remove these leading spaces."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# remove leading spaces from column names\n",
    "\n",
    "df.columns = df.columns.str.strip()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I have removed the leading spaces from the column names. Let's again view the column names to confirm the same."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Mean of the integrated profile',\n",
       "       'Standard deviation of the integrated profile',\n",
       "       'Excess kurtosis of the integrated profile',\n",
       "       'Skewness of the integrated profile', 'Mean of the DM-SNR curve',\n",
       "       'Standard deviation of the DM-SNR curve',\n",
       "       'Excess kurtosis of the DM-SNR curve', 'Skewness of the DM-SNR curve',\n",
       "       'target_class'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view column names again\n",
    "\n",
    "df.columns"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the leading spaces are removed from the column name. But the column names are very long. So, I will make them short by renaming them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# rename column names\n",
    "\n",
    "df.columns = ['IP Mean', 'IP Sd', 'IP Kurtosis', 'IP Skewness', \n",
    "              'DM-SNR Mean', 'DM-SNR Sd', 'DM-SNR Kurtosis', 'DM-SNR Skewness', 'target_class']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['IP Mean', 'IP Sd', 'IP Kurtosis', 'IP Skewness', 'DM-SNR Mean',\n",
       "       'DM-SNR Sd', 'DM-SNR Kurtosis', 'DM-SNR Skewness', 'target_class'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view the renamed column names\n",
    "\n",
    "df.columns"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the column names are shortened. IP stands for `integrated profile` and DM-SNR stands for `delta modulation and signal to noise ratio`. Now, it is much more easy to work with the columns."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our target variable is the `target_class` column. So, I will check its distribution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "target_class\n",
       "0    16259\n",
       "1     1639\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check distribution of target_class column\n",
    "\n",
    "df['target_class'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "module 'numpy' has no attribute 'float'.\n`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\nThe aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:\n    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[10], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;66;03m# view the percentage distribution of target_class column\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtarget_class\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mvalue_counts()\u001b[38;5;241m/\u001b[39mnp\u001b[38;5;241m.\u001b[39mfloat(\u001b[38;5;28mlen\u001b[39m(df))\n",
      "File \u001b[1;32me:\\Programs\\Anaconda\\Lib\\site-packages\\numpy\\__init__.py:338\u001b[0m, in \u001b[0;36m__getattr__\u001b[1;34m(attr)\u001b[0m\n\u001b[0;32m    333\u001b[0m     warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[0;32m    334\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIn the future `np.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mattr\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m` will be defined as the \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    335\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcorresponding NumPy scalar.\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;167;01mFutureWarning\u001b[39;00m, stacklevel\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m    337\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;129;01min\u001b[39;00m __former_attrs__:\n\u001b[1;32m--> 338\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(__former_attrs__[attr])\n\u001b[0;32m    340\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtesting\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m    341\u001b[0m     \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtesting\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mtesting\u001b[39;00m\n",
      "\u001b[1;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'float'.\n`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\nThe aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:\n    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations"
     ]
    }
   ],
   "source": [
    "# view the percentage distribution of target_class column\n",
    "\n",
    "df['target_class'].value_counts()/np.float(len(df))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that percentage of observations of the class label `0` and `1` is 90.84% and 9.16%. So, this is a class imbalanced problem. I will deal with that in later section."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 17898 entries, 0 to 17897\n",
      "Data columns (total 9 columns):\n",
      " #   Column           Non-Null Count  Dtype  \n",
      "---  ------           --------------  -----  \n",
      " 0   IP Mean          17898 non-null  float64\n",
      " 1   IP Sd            17898 non-null  float64\n",
      " 2   IP Kurtosis      17898 non-null  float64\n",
      " 3   IP Skewness      17898 non-null  float64\n",
      " 4   DM-SNR Mean      17898 non-null  float64\n",
      " 5   DM-SNR Sd        17898 non-null  float64\n",
      " 6   DM-SNR Kurtosis  17898 non-null  float64\n",
      " 7   DM-SNR Skewness  17898 non-null  float64\n",
      " 8   target_class     17898 non-null  int64  \n",
      "dtypes: float64(8), int64(1)\n",
      "memory usage: 1.2 MB\n"
     ]
    }
   ],
   "source": [
    "# view summary of dataset\n",
    "\n",
    "df.info()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are no missing values in the dataset and all the variables are numerical variables."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Explore missing values in variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "IP Mean            0\n",
       "IP Sd              0\n",
       "IP Kurtosis        0\n",
       "IP Skewness        0\n",
       "DM-SNR Mean        0\n",
       "DM-SNR Sd          0\n",
       "DM-SNR Kurtosis    0\n",
       "DM-SNR Skewness    0\n",
       "target_class       0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check for missing values in variables\n",
    "\n",
    "df.isnull().sum()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are no missing values in the dataset."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Summary of numerical variables\n",
    "\n",
    "\n",
    "- There are 9 numerical variables in the dataset.\n",
    "\n",
    "\n",
    "- 8 are continuous variables and 1 is discrete variable. \n",
    "\n",
    "\n",
    "- The discrete variable is `target_class` variable. It is also the target variable.\n",
    "\n",
    "\n",
    "- There are no missing values in the dataset."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Outliers in numerical variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>IP Mean</th>\n",
       "      <th>IP Sd</th>\n",
       "      <th>IP Kurtosis</th>\n",
       "      <th>IP Skewness</th>\n",
       "      <th>DM-SNR Mean</th>\n",
       "      <th>DM-SNR Sd</th>\n",
       "      <th>DM-SNR Kurtosis</th>\n",
       "      <th>DM-SNR Skewness</th>\n",
       "      <th>target_class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "      <td>17898.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>111.08</td>\n",
       "      <td>46.55</td>\n",
       "      <td>0.48</td>\n",
       "      <td>1.77</td>\n",
       "      <td>12.61</td>\n",
       "      <td>26.33</td>\n",
       "      <td>8.30</td>\n",
       "      <td>104.86</td>\n",
       "      <td>0.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>25.65</td>\n",
       "      <td>6.84</td>\n",
       "      <td>1.06</td>\n",
       "      <td>6.17</td>\n",
       "      <td>29.47</td>\n",
       "      <td>19.47</td>\n",
       "      <td>4.51</td>\n",
       "      <td>106.51</td>\n",
       "      <td>0.29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>5.81</td>\n",
       "      <td>24.77</td>\n",
       "      <td>-1.88</td>\n",
       "      <td>-1.79</td>\n",
       "      <td>0.21</td>\n",
       "      <td>7.37</td>\n",
       "      <td>-3.14</td>\n",
       "      <td>-1.98</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>100.93</td>\n",
       "      <td>42.38</td>\n",
       "      <td>0.03</td>\n",
       "      <td>-0.19</td>\n",
       "      <td>1.92</td>\n",
       "      <td>14.44</td>\n",
       "      <td>5.78</td>\n",
       "      <td>34.96</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>115.08</td>\n",
       "      <td>46.95</td>\n",
       "      <td>0.22</td>\n",
       "      <td>0.20</td>\n",
       "      <td>2.80</td>\n",
       "      <td>18.46</td>\n",
       "      <td>8.43</td>\n",
       "      <td>83.06</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>127.09</td>\n",
       "      <td>51.02</td>\n",
       "      <td>0.47</td>\n",
       "      <td>0.93</td>\n",
       "      <td>5.46</td>\n",
       "      <td>28.43</td>\n",
       "      <td>10.70</td>\n",
       "      <td>139.31</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>192.62</td>\n",
       "      <td>98.78</td>\n",
       "      <td>8.07</td>\n",
       "      <td>68.10</td>\n",
       "      <td>223.39</td>\n",
       "      <td>110.64</td>\n",
       "      <td>34.54</td>\n",
       "      <td>1191.00</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        IP Mean     IP Sd  IP Kurtosis  IP Skewness  DM-SNR Mean  DM-SNR Sd  \\\n",
       "count  17898.00  17898.00     17898.00     17898.00     17898.00   17898.00   \n",
       "mean     111.08     46.55         0.48         1.77        12.61      26.33   \n",
       "std       25.65      6.84         1.06         6.17        29.47      19.47   \n",
       "min        5.81     24.77        -1.88        -1.79         0.21       7.37   \n",
       "25%      100.93     42.38         0.03        -0.19         1.92      14.44   \n",
       "50%      115.08     46.95         0.22         0.20         2.80      18.46   \n",
       "75%      127.09     51.02         0.47         0.93         5.46      28.43   \n",
       "max      192.62     98.78         8.07        68.10       223.39     110.64   \n",
       "\n",
       "       DM-SNR Kurtosis  DM-SNR Skewness  target_class  \n",
       "count         17898.00         17898.00      17898.00  \n",
       "mean              8.30           104.86          0.09  \n",
       "std               4.51           106.51          0.29  \n",
       "min              -3.14            -1.98          0.00  \n",
       "25%               5.78            34.96          0.00  \n",
       "50%               8.43            83.06          0.00  \n",
       "75%              10.70           139.31          0.00  \n",
       "max              34.54          1191.00          1.00  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view summary statistics in numerical variables\n",
    "\n",
    "round(df.describe(),2)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On closer inspection, we can suspect that all the continuous variables may contain outliers.\n",
    "\n",
    "\n",
    "I will draw boxplots to visualise outliers in the above variables. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'DM-SNR Skewness')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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CwAAy0CpCwAAU6KqtiX58yRfV1U7qmpTklcl+a6quibJd432AQAYMMsvAADAlOjujffz1WkrGgQAgLEyUxcAAAAAYECUugAr7Pjjj09V5XOvflaqKscff/ykIwEAAAADotQFWEHHH398rrvuunsdu+666xS7AAAAwD5T6gKsoPsWug92HAAAAOC+vCgN4AFU1WD/Vncv6/0AAACA1UGpC/AAlrsYfaDiVgkLAAAA7AvLLwAAAAAADIhSFwAAAABgQJS6AAAAAAADotQFAAAAABgQpS4AAAAAwIAodQEAAAAABkSpCwAAAAAwIEpdAAAAAIABUeoCAAAAAAyIUhcAAAAAYECUugAAAAAAA7J20gEAAACAg0tVDfZvdfey3g9gfyh1AQAAgBW13MXoAxW3SlhgGll+AQAAAABgQJS6AAAAwKDd32xcs3SBaaXUBQCAg0BVPaOq/qaqPl1V5086D8By6+50dx77sj/8ymeAaWVNXQAAmHJVNZPk15N8V5IdST5SVZd096cmmwxY7Z7wC+/Pl+68Z9IxluyE89896QhL9vCHrMtf/fx3TzoGMBBKXQAAmH5PTfLp7v5MklTVW5KckUSpCzygL915Tz77qu+ddIwlmZ+fz9zc3KRjLNkQi2hgciy/AAAA0+/RSa5btL9jdAwAgAEyUxcAAKZf7eXYVy02WVWbk2xOktnZ2czPz485FrDaHXHy+Xn8xQNchvviSQdYuiNOTubnD590DGAglLoAADD9diR5zKL945J8/r4ndffWJFuTZMOGDT3Eny8Dy+vW81816QgHjYc/ZF3mzp6bdAxgIJS6ABOwdu3a7Ny58ytbABizjyQ5qapOTPIPSX4oyVmTjQQMwdDW000W1qYdYm6ApVDqAkzAniJXoQvASujunVX1E0nel2QmyRu6+6oJxwIAYD8pdQFWUFWl+6uWMEzV3pY6BIDl093vSfKeSecAAODArZl0gD2q6per6q+r6sqqemdVHTXpTADL7eijj06ysPzC4u2e4wAAAAAPZtWUukk+kOSU7v6mJH+b5OUTzgOw7G655Zace+65mZmZSZLMzMzk3HPPzS233DLhZAAAsHKqamz/PvfqZ431/gCrwaopdbv7/d29Z3HJv8jCG3kBpsrJJ5+c5zznObnrrruyffv23HXXXXnOc56Tk08+edLRAABgxXT32P5t3759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",
      "text/plain": [
       "<Figure size 1728x1440 with 8 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw boxplots to visualize outliers\n",
    "\n",
    "plt.figure(figsize=(24,20))\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 1)\n",
    "fig = df.boxplot(column='IP Mean')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('IP Mean')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 2)\n",
    "fig = df.boxplot(column='IP Sd')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('IP Sd')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 3)\n",
    "fig = df.boxplot(column='IP Kurtosis')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('IP Kurtosis')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 4)\n",
    "fig = df.boxplot(column='IP Skewness')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('IP Skewness')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 5)\n",
    "fig = df.boxplot(column='DM-SNR Mean')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('DM-SNR Mean')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 6)\n",
    "fig = df.boxplot(column='DM-SNR Sd')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('DM-SNR Sd')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 7)\n",
    "fig = df.boxplot(column='DM-SNR Kurtosis')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('DM-SNR Kurtosis')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 8)\n",
    "fig = df.boxplot(column='DM-SNR Skewness')\n",
    "fig.set_title('')\n",
    "fig.set_ylabel('DM-SNR Skewness')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above boxplots confirm that there are lot of outliers in these variables."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Handle outliers with SVMs\n",
    "\n",
    "\n",
    "There are 2 variants of SVMs. They are `hard-margin variant of SVM` and `soft-margin variant of SVM`.\n",
    "\n",
    "\n",
    "The `hard-margin variant of SVM` does not deal with outliers. In this case, we want to find the hyperplane with maximum margin such that every training point is correctly classified with margin at least 1. This technique does not handle outliers well.\n",
    "\n",
    "\n",
    "Another version of SVM is called `soft-margin variant of SVM`. In this case, we can have a few points incorrectly classified or \n",
    "classified with a margin less than 1. But for every such point, we have to pay a penalty in the form of `C` parameter, which controls the outliers. `Low C` implies we are allowing more outliers and `high C` implies less outliers.\n",
    "\n",
    "\n",
    "The message is that since the dataset contains outliers, so the value of C should be high while training the model."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check the distribution of variables\n",
    "\n",
    "\n",
    "Now, I will plot the histograms to check distributions to find out if they are normal or skewed. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Number of pulsar stars')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1728x1440 with 8 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot histogram to check distribution\n",
    "\n",
    "\n",
    "plt.figure(figsize=(24,20))\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 1)\n",
    "fig = df['IP Mean'].hist(bins=20)\n",
    "fig.set_xlabel('IP Mean')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 2)\n",
    "fig = df['IP Sd'].hist(bins=20)\n",
    "fig.set_xlabel('IP Sd')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 3)\n",
    "fig = df['IP Kurtosis'].hist(bins=20)\n",
    "fig.set_xlabel('IP Kurtosis')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 4)\n",
    "fig = df['IP Skewness'].hist(bins=20)\n",
    "fig.set_xlabel('IP Skewness')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 5)\n",
    "fig = df['DM-SNR Mean'].hist(bins=20)\n",
    "fig.set_xlabel('DM-SNR Mean')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 6)\n",
    "fig = df['DM-SNR Sd'].hist(bins=20)\n",
    "fig.set_xlabel('DM-SNR Sd')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 7)\n",
    "fig = df['DM-SNR Kurtosis'].hist(bins=20)\n",
    "fig.set_xlabel('DM-SNR Kurtosis')\n",
    "fig.set_ylabel('Number of pulsar stars')\n",
    "\n",
    "\n",
    "plt.subplot(4, 2, 8)\n",
    "fig = df['DM-SNR Skewness'].hist(bins=20)\n",
    "fig.set_xlabel('DM-SNR Skewness')\n",
    "fig.set_ylabel('Number of pulsar stars')\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that all the 8 continuous variables are skewed. "
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **9. Declare feature vector and target variable** <a class=\"anchor\" id=\"9\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(['target_class'], axis=1)\n",
    "\n",
    "y = df['target_class']"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **10. Split data into separate training and test set** <a class=\"anchor\" id=\"10\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# split X and y into training and testing sets\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((14318, 8), (3580, 8))"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check the shape of X_train and X_test\n",
    "\n",
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **11. Feature Scaling** <a class=\"anchor\" id=\"11\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "cols = X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "\n",
    "X_train = scaler.fit_transform(X_train)\n",
    "\n",
    "X_test = scaler.transform(X_test)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = pd.DataFrame(X_train, columns=[cols])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = pd.DataFrame(X_test, columns=[cols])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>IP Mean</th>\n",
       "      <th>IP Sd</th>\n",
       "      <th>IP Kurtosis</th>\n",
       "      <th>IP Skewness</th>\n",
       "      <th>DM-SNR Mean</th>\n",
       "      <th>DM-SNR Sd</th>\n",
       "      <th>DM-SNR Kurtosis</th>\n",
       "      <th>DM-SNR Skewness</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "      <td>1.431800e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.986604e-16</td>\n",
       "      <td>-6.757488e-16</td>\n",
       "      <td>2.125527e-17</td>\n",
       "      <td>3.581784e-17</td>\n",
       "      <td>-2.205248e-17</td>\n",
       "      <td>-1.583840e-16</td>\n",
       "      <td>-9.700300e-18</td>\n",
       "      <td>1.214786e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "      <td>1.000035e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-4.035499e+00</td>\n",
       "      <td>-3.181033e+00</td>\n",
       "      <td>-2.185946e+00</td>\n",
       "      <td>-5.744051e-01</td>\n",
       "      <td>-4.239001e-01</td>\n",
       "      <td>-9.733707e-01</td>\n",
       "      <td>-2.455649e+00</td>\n",
       "      <td>-1.003411e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-3.896291e-01</td>\n",
       "      <td>-6.069473e-01</td>\n",
       "      <td>-4.256221e-01</td>\n",
       "      <td>-3.188054e-01</td>\n",
       "      <td>-3.664918e-01</td>\n",
       "      <td>-6.125457e-01</td>\n",
       "      <td>-5.641035e-01</td>\n",
       "      <td>-6.627590e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.587461e-01</td>\n",
       "      <td>5.846646e-02</td>\n",
       "      <td>-2.453172e-01</td>\n",
       "      <td>-2.578142e-01</td>\n",
       "      <td>-3.372294e-01</td>\n",
       "      <td>-4.067482e-01</td>\n",
       "      <td>3.170446e-02</td>\n",
       "      <td>-2.059136e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.267059e-01</td>\n",
       "      <td>6.501017e-01</td>\n",
       "      <td>-1.001238e-02</td>\n",
       "      <td>-1.419621e-01</td>\n",
       "      <td>-2.463724e-01</td>\n",
       "      <td>1.078934e-01</td>\n",
       "      <td>5.362759e-01</td>\n",
       "      <td>3.256217e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.151882e+00</td>\n",
       "      <td>7.621116e+00</td>\n",
       "      <td>7.008906e+00</td>\n",
       "      <td>1.054430e+01</td>\n",
       "      <td>7.025568e+00</td>\n",
       "      <td>4.292181e+00</td>\n",
       "      <td>5.818557e+00</td>\n",
       "      <td>1.024613e+01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            IP Mean         IP Sd   IP Kurtosis   IP Skewness   DM-SNR Mean  \\\n",
       "count  1.431800e+04  1.431800e+04  1.431800e+04  1.431800e+04  1.431800e+04   \n",
       "mean   1.986604e-16 -6.757488e-16  2.125527e-17  3.581784e-17 -2.205248e-17   \n",
       "std    1.000035e+00  1.000035e+00  1.000035e+00  1.000035e+00  1.000035e+00   \n",
       "min   -4.035499e+00 -3.181033e+00 -2.185946e+00 -5.744051e-01 -4.239001e-01   \n",
       "25%   -3.896291e-01 -6.069473e-01 -4.256221e-01 -3.188054e-01 -3.664918e-01   \n",
       "50%    1.587461e-01  5.846646e-02 -2.453172e-01 -2.578142e-01 -3.372294e-01   \n",
       "75%    6.267059e-01  6.501017e-01 -1.001238e-02 -1.419621e-01 -2.463724e-01   \n",
       "max    3.151882e+00  7.621116e+00  7.008906e+00  1.054430e+01  7.025568e+00   \n",
       "\n",
       "          DM-SNR Sd DM-SNR Kurtosis DM-SNR Skewness  \n",
       "count  1.431800e+04    1.431800e+04    1.431800e+04  \n",
       "mean  -1.583840e-16   -9.700300e-18    1.214786e-16  \n",
       "std    1.000035e+00    1.000035e+00    1.000035e+00  \n",
       "min   -9.733707e-01   -2.455649e+00   -1.003411e+00  \n",
       "25%   -6.125457e-01   -5.641035e-01   -6.627590e-01  \n",
       "50%   -4.067482e-01    3.170446e-02   -2.059136e-01  \n",
       "75%    1.078934e-01    5.362759e-01    3.256217e-01  \n",
       "max    4.292181e+00    5.818557e+00    1.024613e+01  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.describe()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now have `X_train` dataset ready to be fed into the Logistic Regression classifier. I will do it as follows."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **12. Run SVM with default hyperparameters** <a class=\"anchor\" id=\"12\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "Default hyperparameter means C=1.0,  kernel=`rbf` and gamma=`auto` among other parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with default hyperparameters: 0.9827\n"
     ]
    }
   ],
   "source": [
    "# import SVC classifier\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "\n",
    "# import metrics to compute accuracy\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "\n",
    "# instantiate classifier with default hyperparameters\n",
    "svc=SVC() \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with default hyperparameters: {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run SVM with rbf kernel and C=100.0\n",
    "\n",
    "\n",
    "We have seen that there are outliers in our dataset. So, we should increase the value of C as higher C means fewer outliers. \n",
    "So, I will run SVM with kernel=`rbf` and C=100.0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with rbf kernel and C=100.0 : 0.9832\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with rbf kernel and C=100\n",
    "svc=SVC(C=100.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with rbf kernel and C=100.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that we obtain a higher accuracy with C=100.0 as higher C means less outliers.\n",
    "\n",
    "Now, I will further increase the value of C=1000.0 and check accuracy."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run SVM with rbf kernel and C=1000.0\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with rbf kernel and C=1000.0 : 0.9816\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with rbf kernel and C=1000\n",
    "svc=SVC(C=1000.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with rbf kernel and C=1000.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this case, we can see that the accuracy had decreased with C=1000.0"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **13. Run SVM with linear kernel** <a class=\"anchor\" id=\"13\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "### Run SVM with linear kernel and C=1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with linear kernel and C=1.0 : 0.9830\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with linear kernel and C=1.0\n",
    "linear_svc=SVC(kernel='linear', C=1.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "linear_svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred_test=linear_svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with linear kernel and C=1.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred_test)))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run SVM with linear kernel and C=100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with linear kernel and C=100.0 : 0.9832\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with linear kernel and C=100.0\n",
    "linear_svc100=SVC(kernel='linear', C=100.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "linear_svc100.fit(X_train, y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=linear_svc100.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with linear kernel and C=100.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run SVM with linear kernel and C=1000.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with linear kernel and C=1000.0 : 0.9832\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with linear kernel and C=1000.0\n",
    "linear_svc1000=SVC(kernel='linear', C=1000.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "linear_svc1000.fit(X_train, y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=linear_svc1000.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with linear kernel and C=1000.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that we can obtain higher accuracy with C=100.0 and C=1000.0 as compared to C=1.0."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, **y_test** are the true class labels and **y_pred** are the predicted class labels in the test-set."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare the train-set and test-set accuracy\n",
    "\n",
    "\n",
    "Now, I will compare the train-set and test-set accuracy to check for overfitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 1, ..., 0, 0, 0])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred_train = linear_svc.predict(X_train)\n",
    "\n",
    "y_pred_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training-set accuracy score: 0.9783\n"
     ]
    }
   ],
   "source": [
    "print('Training-set accuracy score: {0:0.4f}'. format(accuracy_score(y_train, y_pred_train)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the training set and test-set accuracy are very much comparable."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check for overfitting and underfitting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.9783\n",
      "Test set score: 0.9830\n"
     ]
    }
   ],
   "source": [
    "# print the scores on training and test set\n",
    "\n",
    "print('Training set score: {:.4f}'.format(linear_svc.score(X_train, y_train)))\n",
    "\n",
    "print('Test set score: {:.4f}'.format(linear_svc.score(X_test, y_test)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The training-set accuracy score is 0.9783 while the test-set accuracy to be 0.9830. These two values are quite comparable. So, there is no question of overfitting. \n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare model accuracy with null accuracy\n",
    "\n",
    "\n",
    "So, the model accuracy is 0.9832. But, we cannot say that our model is very good based on the above accuracy. We must compare it with the **null accuracy**. Null accuracy is the accuracy that could be achieved by always predicting the most frequent class.\n",
    "\n",
    "So, we should first check the class distribution in the test set. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    3306\n",
       "1     274\n",
       "Name: target_class, dtype: int64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check class distribution in test set\n",
    "\n",
    "y_test.value_counts()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the occurences of most frequent class `0` is 3306. So, we can calculate null accuracy by dividing 3306 by total number of occurences."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Null accuracy score: 0.9235\n"
     ]
    }
   ],
   "source": [
    "# check null accuracy score\n",
    "\n",
    "null_accuracy = (3306/(3306+274))\n",
    "\n",
    "print('Null accuracy score: {0:0.4f}'. format(null_accuracy))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that our model accuracy score is 0.9830 but null accuracy score is 0.9235. So, we can conclude that our SVM classifier is doing a very good job in predicting the class labels."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **14. Run SVM with polynomial kernel** <a class=\"anchor\" id=\"14\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "### Run SVM with polynomial kernel and C=1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with polynomial kernel and C=1.0 : 0.9807\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with polynomial kernel and C=1.0\n",
    "poly_svc=SVC(kernel='poly', C=1.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "poly_svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=poly_svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with polynomial kernel and C=1.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " ### Run SVM with polynomial kernel and C=100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with polynomial kernel and C=1.0 : 0.9824\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with polynomial kernel and C=100.0\n",
    "poly_svc100=SVC(kernel='poly', C=100.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "poly_svc100.fit(X_train, y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=poly_svc100.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with polynomial kernel and C=1.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Polynomial kernel gives poor performance. It may be overfitting the training set."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **15. Run SVM with sigmoid kernel** <a class=\"anchor\" id=\"15\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "### Run SVM with sigmoid kernel and C=1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with sigmoid kernel and C=1.0 : 0.8858\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with sigmoid kernel and C=1.0\n",
    "sigmoid_svc=SVC(kernel='sigmoid', C=1.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "sigmoid_svc.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=sigmoid_svc.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with sigmoid kernel and C=1.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run SVM with sigmoid kernel and C=100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model accuracy score with sigmoid kernel and C=100.0 : 0.8855\n"
     ]
    }
   ],
   "source": [
    "# instantiate classifier with sigmoid kernel and C=100.0\n",
    "sigmoid_svc100=SVC(kernel='sigmoid', C=100.0) \n",
    "\n",
    "\n",
    "# fit classifier to training set\n",
    "sigmoid_svc100.fit(X_train,y_train)\n",
    "\n",
    "\n",
    "# make predictions on test set\n",
    "y_pred=sigmoid_svc100.predict(X_test)\n",
    "\n",
    "\n",
    "# compute and print accuracy score\n",
    "print('Model accuracy score with sigmoid kernel and C=100.0 : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that sigmoid kernel is also performing poorly just like with polynomial kernel."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comments\n",
    "\n",
    "\n",
    "We get maximum accuracy with `rbf` and `linear` kernel with C=100.0. and the accuracy is 0.9832. Based on the above analysis we can conclude that our classification model accuracy is very good. Our model is doing a very good job in terms of predicting the class labels.\n",
    "\n",
    "\n",
    "But, this is not true. Here, we have an imbalanced dataset. The problem is that accuracy is an inadequate measure for quantifying predictive performance in the imbalanced dataset problem.\n",
    "\n",
    "\n",
    "So, we must explore alternative metrices that provide better guidance in selecting models. In particular, we would like to know the underlying distribution of values and the type of errors our classifer is making. \n",
    "\n",
    "\n",
    "One such metric to analyze the model performance in imbalanced classes problem is `Confusion matrix`."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **16. Confusion matrix** <a class=\"anchor\" id=\"16\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "A confusion matrix is a tool for summarizing the performance of a classification algorithm. A confusion matrix will give us a clear picture of classification model performance and the types of errors produced by the model. It gives us a summary of correct and incorrect predictions broken down by each category. The summary is represented in a tabular form.\n",
    "\n",
    "\n",
    "Four types of outcomes are possible while evaluating a classification model performance. These four outcomes are described below:-\n",
    "\n",
    "\n",
    "**True Positives (TP)** – True Positives occur when we predict an observation belongs to a certain class and the observation actually belongs to that class.\n",
    "\n",
    "\n",
    "**True Negatives (TN)** – True Negatives occur when we predict an observation does not belong to a certain class and the observation actually does not belong to that class.\n",
    "\n",
    "\n",
    "**False Positives (FP)** – False Positives occur when we predict an observation belongs to a    certain class but the observation actually does not belong to that class. This type of error is called **Type I error.**\n",
    "\n",
    "\n",
    "\n",
    "**False Negatives (FN)** – False Negatives occur when we predict an observation does not belong to a certain class but the observation actually belongs to that class. This is a very serious error and it is called **Type II error.**\n",
    "\n",
    "\n",
    "\n",
    "These four outcomes are summarized in a confusion matrix given below.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Confusion matrix\n",
      "\n",
      " [[3289   17]\n",
      " [  44  230]]\n",
      "\n",
      "True Positives(TP) =  3289\n",
      "\n",
      "True Negatives(TN) =  230\n",
      "\n",
      "False Positives(FP) =  17\n",
      "\n",
      "False Negatives(FN) =  44\n"
     ]
    }
   ],
   "source": [
    "# Print the Confusion Matrix and slice it into four pieces\n",
    "\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "cm = confusion_matrix(y_test, y_pred_test)\n",
    "\n",
    "print('Confusion matrix\\n\\n', cm)\n",
    "\n",
    "print('\\nTrue Positives(TP) = ', cm[0,0])\n",
    "\n",
    "print('\\nTrue Negatives(TN) = ', cm[1,1])\n",
    "\n",
    "print('\\nFalse Positives(FP) = ', cm[0,1])\n",
    "\n",
    "print('\\nFalse Negatives(FN) = ', cm[1,0])"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The confusion matrix shows `3289 + 230 = 3519 correct predictions` and `17 + 44 = 61 incorrect predictions`.\n",
    "\n",
    "\n",
    "In this case, we have\n",
    "\n",
    "\n",
    "- `True Positives` (Actual Positive:1 and Predict Positive:1) - 3289\n",
    "\n",
    "\n",
    "- `True Negatives` (Actual Negative:0 and Predict Negative:0) - 230\n",
    "\n",
    "\n",
    "- `False Positives` (Actual Negative:0 but Predict Positive:1) - 17 `(Type I error)`\n",
    "\n",
    "\n",
    "- `False Negatives` (Actual Positive:1 but Predict Negative:0) - 44 `(Type II error)`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc8440892e8>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize confusion matrix with seaborn heatmap\n",
    "\n",
    "cm_matrix = pd.DataFrame(data=cm, columns=['Actual Positive:1', 'Actual Negative:0'], \n",
    "                                 index=['Predict Positive:1', 'Predict Negative:0'])\n",
    "\n",
    "sns.heatmap(cm_matrix, annot=True, fmt='d', cmap='YlGnBu')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **17. Classification metrices** <a class=\"anchor\" id=\"17\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classification Report\n",
    "\n",
    "\n",
    "**Classification report** is another way to evaluate the classification model performance. It displays the  **precision**, **recall**, **f1** and **support** scores for the model. I have described these terms in later.\n",
    "\n",
    "We can print a classification report as follows:-"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.99      0.99      0.99      3306\n",
      "           1       0.93      0.84      0.88       274\n",
      "\n",
      "    accuracy                           0.98      3580\n",
      "   macro avg       0.96      0.92      0.94      3580\n",
      "weighted avg       0.98      0.98      0.98      3580\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "\n",
    "print(classification_report(y_test, y_pred_test))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classification accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "TP = cm[0,0]\n",
    "TN = cm[1,1]\n",
    "FP = cm[0,1]\n",
    "FN = cm[1,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification accuracy : 0.9830\n"
     ]
    }
   ],
   "source": [
    "# print classification accuracy\n",
    "\n",
    "classification_accuracy = (TP + TN) / float(TP + TN + FP + FN)\n",
    "\n",
    "print('Classification accuracy : {0:0.4f}'.format(classification_accuracy))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classification error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification error : 0.0170\n"
     ]
    }
   ],
   "source": [
    "# print classification error\n",
    "\n",
    "classification_error = (FP + FN) / float(TP + TN + FP + FN)\n",
    "\n",
    "print('Classification error : {0:0.4f}'.format(classification_error))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Precision\n",
    "\n",
    "\n",
    "**Precision** can be defined as the percentage of correctly predicted positive outcomes out of all the predicted positive outcomes. It can be given as the ratio of true positives (TP) to the sum of true and false positives (TP + FP). \n",
    "\n",
    "\n",
    "So, **Precision** identifies the proportion of correctly predicted positive outcome. It is more concerned with the positive class than the negative class.\n",
    "\n",
    "\n",
    "\n",
    "Mathematically, precision can be defined as the ratio of `TP to (TP + FP)`.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Precision : 0.9949\n"
     ]
    }
   ],
   "source": [
    "# print precision score\n",
    "\n",
    "precision = TP / float(TP + FP)\n",
    "\n",
    "\n",
    "print('Precision : {0:0.4f}'.format(precision))\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Recall\n",
    "\n",
    "\n",
    "Recall can be defined as the percentage of correctly predicted positive outcomes out of all the actual positive outcomes.\n",
    "It can be given as the ratio of true positives (TP) to the sum of true positives and false negatives (TP + FN). **Recall** is also called **Sensitivity**.\n",
    "\n",
    "\n",
    "**Recall** identifies the proportion of correctly predicted actual positives.\n",
    "\n",
    "\n",
    "Mathematically, **recall** can be defined as the ratio of `TP to (TP + FN)`.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall or Sensitivity : 0.9868\n"
     ]
    }
   ],
   "source": [
    "recall = TP / float(TP + FN)\n",
    "\n",
    "print('Recall or Sensitivity : {0:0.4f}'.format(recall))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### True Positive Rate\n",
    "\n",
    "\n",
    "**True Positive Rate** is synonymous with **Recall**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True Positive Rate : 0.9868\n"
     ]
    }
   ],
   "source": [
    "true_positive_rate = TP / float(TP + FN)\n",
    "\n",
    "\n",
    "print('True Positive Rate : {0:0.4f}'.format(true_positive_rate))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### False Positive Rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "False Positive Rate : 0.0688\n"
     ]
    }
   ],
   "source": [
    "false_positive_rate = FP / float(FP + TN)\n",
    "\n",
    "\n",
    "print('False Positive Rate : {0:0.4f}'.format(false_positive_rate))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Specificity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Specificity : 0.9312\n"
     ]
    }
   ],
   "source": [
    "specificity = TN / (TN + FP)\n",
    "\n",
    "print('Specificity : {0:0.4f}'.format(specificity))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### f1-score\n",
    "\n",
    "\n",
    "**f1-score** is the weighted harmonic mean of precision and recall. The best possible **f1-score** would be 1.0 and the worst \n",
    "would be 0.0.  **f1-score** is the harmonic mean of precision and recall. So, **f1-score** is always lower than accuracy measures as they embed precision and recall into their computation. The weighted average of `f1-score` should be used to \n",
    "compare classifier models, not global accuracy.\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Support\n",
    "\n",
    "\n",
    "**Support** is the actual number of occurrences of the class in our dataset."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **18. ROC - AUC** <a class=\"anchor\" id=\"18\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "\n",
    "### ROC Curve\n",
    "\n",
    "\n",
    "Another tool to measure the classification model performance visually is **ROC Curve**. ROC Curve stands for **Receiver Operating Characteristic Curve**. An **ROC Curve** is a plot which shows the performance of a classification model at various \n",
    "classification threshold levels. \n",
    "\n",
    "\n",
    "\n",
    "The **ROC Curve** plots the **True Positive Rate (TPR)** against the **False Positive Rate (FPR)** at various threshold levels.\n",
    "\n",
    "\n",
    "\n",
    "**True Positive Rate (TPR)** is also called **Recall**. It is defined as the ratio of `TP to (TP + FN)`.\n",
    "\n",
    "\n",
    "\n",
    "**False Positive Rate (FPR)** is defined as the ratio of `FP to (FP + TN)`.\n",
    "\n",
    "\n",
    "\n",
    "In the ROC Curve, we will focus on the TPR (True Positive Rate) and FPR (False Positive Rate) of a single point. This will give us the general performance of the ROC curve which consists of the TPR and FPR at various threshold levels. So, an ROC Curve plots TPR vs FPR at different classification threshold levels. If we lower the threshold levels, it may result in more items being classified as positve. It will increase both True Positives (TP) and False Positives (FP).\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd4VGX2wPHvIaFYAJWO9CYE7BQRQQEFce0uLsri4qI0xYINRVl0LYggCIKAgiJiX1BUFFnLustPRARBQJFIR7r0Ekhyfn+8d8IwTCY3ITOTSc7neebJzJ07d86dmdz3vuWeV1QVY4wxBqBYvAMwxhhTcFihYIwxJosVCsYYY7JYoWCMMSaLFQrGGGOyWKFgjDEmixUKRYSIlBGR6SKyW0RURGrFO6bj5e3HX7N7nMdtdheR9OOPrmATkUu8z6tavGMpqGL9Wwj3nYjImSIyT0QOishqb9lx/84jSYhCQURe8z4IFZEMEVkvIq+LyOlh1q0kIqNFZLWIHBKRrSLyvoicE2bdZBHp533oe0Rkl4gsFJGBInJqbPYuZvoALYFWQBVgXX5uXEQGB31HmSKyQUTeEpGa+fk+OagCvO9nRRGp5sV6SchT7wDH/K4KkqDPWUVkr4gsEpEe8Y4rN0TkahH5n4j8ISL7RCRVRKaKSBnv+YsKy8lLLvwf7jf8e9CyocBuoCHQzFvm+3eeFwlRKHj+i/swagA3A+cC7wWvICLVgfnAhbiDYD3gT8BhYK6IXB60bnHgE+Ap4F2gHXA2MBC4APhbdHfnaCJSIspvUR9Yqqo/qeomVc3Iy0ZyiHM17juqBtwCNAU+EpGkPGwr17z9Onic2zigqpvzK6YouhP3WZ8LfAq8IiKd4xvS0bL7fkWkHTANmA1cBJwF3IE7+JWMVRwFjaoe8n7DmUGL6wP/UdXVqrrVW++4f+cRPxNVLfA34DXg3yHL+gEKlAlaNgPYFLws6LmZ3nMneI/vAzKBltm856kR4kkGBgG/AWnABmB00PMK/DXkNf8GXgt6vBp4EhgLbAe+B6YCn4d5v0+Bt4MeXwbMAQ547/0qUC5CvKu9mAK3r73lpYHxwFbgIK5A7RD0ulre+l29z28fMCyb9xgMpIYs6+q9/oygz+Uu4E1gF/Cet7yS9x1vBfZ4+9YmZFttgcVenIu9x0d9zmEenwyMxNWK0rzP4ZGgdYNvq73l3YH0oG10B9JxNawFwH7vuzo/JL5LgZ+C4rs43O8g5DW1cQfH373t/gR08/H/EO73tQJ4K8J3cZH3ulre40u8x9W8x8WB54H13me1kaN/c+fhfodbgL3eZ3B5mN/ZUb/pbOIfCcyPsH+B312432y+xeGtez7wGa5A2gvMA1pk81s4FXgDWIv731uOO45I0DqNgVnATtz/y8/B3ylwm7fsoBfbN0HfQdZ3ks1nMDjC7/wF3LFgP7AQuD4v/8eqmlA1hSwiUhX4M5Dh3fCae/4EvKiqu8O87Bncwecy73E34EtV/Tbce6jqjgghTMSdqQ0GUoAbgJW53hF3gNyCa9b5G/A60D64WUxEAjFP9h63Az4E3sadYV2L+9Kni4hk8z7NcLWhQG3rem/5JKAj8FfcGecc4GMRaRjy+mdxB/IzgTG52L8D3t/iQcv+AXyL++ceKCInAF/hCqhOXhwzgdki0sjb56rAx8AP3uvuw/0TZMv7LD4GrsadQDTC1V62equc5/29AfeZNAvdRpBiuN/P3d7rdgDvikiy916n405IvvOevxd3gM3JycAXwOW4z3YC8KqItPXx2lAHOPpzzq1+wI2430J93Oc2N+j5Mrjf3CW4fZwFzBCRBiHbCf1Nh7MRqCcizbN5fh1wjXe/OUf/ZvMtDhFpjDso78C1FJwLjCD7FpSSuIL7Wtz//T+Bx3GFR8BbuIP9hbjvtL+3fUTkfGAc7rd0hrcPr2fzXuu8/V6P+/+rAgwLsw8CfIRr5fgL0AR4CXhbRNqHrO7v/zins5KCcMOdRabjSvL9HCk5hwWt09xbdl022zjNe/4B7/F+YFQeYqnnbefPuTyTC1dT+CJknWK40v6hoGX9cf9ESd7jr4EhIa+r4b3nOTl8hv8Osx9XhKy3AJgUcobxmI/PZTBBZ6deTN/hzqqKB30uE0Ne1x33w08OWf4lMNK7/ySwJngd4MrQzzn4MdDee9w0m3irec9fEiae0JqCAucFLbuAo2tAT3nfZ1LQOpeH+x34+Bw/BF7OYZ3g/UzGnX0q0Dvcd+Ety6mm8IL3mUsuYl0EDIz0m87mdSfiClH1ftsf4ArcctnFG6U4pnivLZbN80f9FrJZ5wVgdtDjXUD3bNa9znv+mJaMcN9J0L48GuH7vwRX6ygbss4k4APvfi18/h+rJlZN4TvgHNzB/5+4s5jHgp7P7iw5QEMeS5hlfgTOMD/Pw2tDzQt+oK4tcSquFhPQDZiqR/oAmgH3eB2Me0VkL7DMe65+Lt47xfv7Tcjyb3BV4GzjjKCOF9N+3EFccIX04QjbagZUBnaG7FNrjuxPCjBPVYNHgvwvh1jOB3ao6nyfsUeiuINHwAbvb6Wg+L7Xo/tpwtZAg4nIiSIyRESWeh2ue4ErgJo+YnrFW/8g7ux2CK4pMK9exZ1BporIOBG5IbjdWUQqiMhYEflFRHZ67904TKw5/lZUdb+qXo1rPnsY13z2MLA8UDvMTn7GgfuNfKFHt+FHeu9iIjJARH4UkW3ee/cOee9huO/ma2/wxXlBz83GtSisEpG3RaSniJT3894RNANKABtC/n8CNb5gvv6Pk48zoFg6oKqp3v0lXnVxDPB3b9kKXB9BE2B6mNc38f4uD/obevDLL8qxhVS4qv2+MMsmAw94Vc00XEEYXP0thqsGTgnz2k25D/UY4QrLcHGGsw53hp4JbFLV/WHWCd1WMVwb63Vh1g28PlxMfgr0vBT64WSGHPAD2y0WZllu3vs5XDPJfcAvuM9mOFDWx2sH4moV+3CfdfD7ZeLv93ckWNUfRaQ2rqmyLe4M+J8icoG65tjXcLW/B4FVuOaqt3EHpGB+fyuo6mpvu6+JyEDgV2/7t0Z4WX7HkZvfyH24wqs/rka9B9dU+Kesjan+U0Sm4mqK7YBHRGSoqj6qqntFpCmuf+pSXIEyVETaq+oPuYgjWDFc7SNc8+ehkMe+PpNEqimEGgz8zfuQUdU/cB1QdwSGtYV4BNiMK63BdRi1E5GW4TYeYUjqAu9vhwixbQGqBm2rJEfOzCNS1aXee9zi3X5U1cVBq8wHGqtqapjbXj/v4Vnq/W0Tsrx10HO5ddiLY2U2BUI484E6wO4w+xMYmrcUaBEyiumiHLb7A3Ba4PcRRuAfJuzIqFxaBjQLiS/s7ypEG1wt8B1VXYQ7iwxtG8/OZu8z2hhSIID7/VUMiec8cqCqe1V1uqrehRs51gjXYR6IdayqzlDVn3DNPnV8xpojdX14m4CK3qLsvp/8jOMH4FIR8XscbAN8pqoTVXWhd5J6TO3c+/2PVdU/4wak9Al6LkNVv1HVQbiaykbcaMq8mg+cApQK8/+zNi8bTNhCQVV/wXUkPhO0+A5cx/OXInK5iFQXkWYi8ibu7Ke7qgY6P1/AdfLNEpH7RaSpiNT0XvcB7oAc7n1TcU08Y0XkryJS13uPu4NW+zfQW0RaikgT3NlNbobFTQZuwo0WCO2IGgRcIyIjROQc7/0vF5GJXqetL6r6G25I71gR6SgiDUXkBVyN6rlcxHq8puLO+D4RkQ4iUktEWojIwyJyrbfOS0AFYIKINPI60J7KYbtf4jrW3xGRa0Sktoi0EpHbvOe34fqoOohI5QgnAX6MxTUlveTF1zYovkhnostx32VzEUnBdTRXjbC+X1/h2u3/6f0+OuP+N7IlIg+ISFcRaezVGP6O+1/6NSjWruIupjoH16GapwLVa1YZJiJtve/lTBEZxtG1/DW4Gs8VIlJRRAK1p3yLA3cNQH1gqvf/X1dEOmd3oui99yVe3A1E5EmgRdB+nSwiY0Sknbdf5+JqDMu8568RkXtF5HwRqYHrsK7OkebfvPgSd7yZJiLXiUgdb/v9ROT2PG3RT8dDvG+EGZLqLW+F+6drH7SsCq5ZaQ3ubGMb8C/g3DCvT8Z1cM3HVa1244ZzPQKcEiGe4rh+jdXee6zH6xT1nq+MGxGwG9ek0ofwHc2PZrP98t52DwOVwjzf2tveHo4MextJSGdtTp8hbiRHYEhqGtkPSb3Ix3c0mJDOzTDrhO14BcrhDvwbvP3egDs4nBu0TnvcyI80YAmuap5tR7P3uDQwGnc2dghX+AwIev4Wb9lhchiSGhLvMZ3UuOaAJV58iznS0XxDhM+jOm70zD4vxsdxI9u+zsvnGLLO33E1jwO4GnQXInc098KdOQeGZn4PXBO0vTNxF1cd8H67fcnFbzoktra4iwRX4/pEtuFGvnUNWe9B77eQwZEhqfkWh7duc+/1+3D/T98BzbP5LZTFjeLbjRthNAbvOOA9Xwo3umeVt19bvP2s7j3fBncQDwwBXwEMwOvcD/1OstuX0O8fOAHXp7QK9zvfhBtm2y63/8eqmhWMMSYfiUgb4D/AWeqaOYxJCFYoGJMPRKQPboTS77j+oxG40U8XxDUwY3IpkUYfGVOQ1cSNTKmEq77PBh6Ka0TG5IHVFIwxxmRJ2NFHxhhj8l/CNR+VL19ea9WqFe8wjDEmofzwww/bVLVCTuslXKFQq1Yt5s/Pj8wFxhhTdIjIGj/rWfORMcaYLFYoGGOMyWKFgjHGmCxWKBhjjMlihYIxxpgsUSsURGSSiGwRkSXZPC8iMkpEUkVkcchkFMYYY+IgmjWF13CZIrPTCZe2tj7QE5cl0xhjTBxF7ToFVf1GRGpFWOUa4HV1eTbmisgpIlJFVTdGKyZjjCnIDqVnsmXPQTbvPsimXWls3u3ur9uyg7UbNnFZizO5+9LczLqbe/G8eO103FwDAeu9ZccUCiLSE1eboEaNGjEJzhhj8ouqsuvAYTbtPsimXUcO+pu8g37gtm1v6AyacGDNIv74bDTFSp5E5dPfjHqs8SwUQueQhWxmqVLVCbhZqWjatKll8DPGFBhp6Rls2Z121AF/8+6DbNqdxuZdB7MO/GnpmTluq5hAhdIlqVymFKckHean6WNYOPtfVK5ei0eeGc61nZrkuI3jFc9CYT1u5qmAarhc9MYYE3eqyh/7DrF5d5p3kA86y999MGv5H/uOPbsPp3TJZCqVLUXlMqWoVKYUlcqUpHJZd79ymVJULluK8ieXJKmYkJGRwZlnnsny5ct58MEHGTx4MCec4Hu23eMSz0JhBnCniLyNm+d0l/UnGGNi4eDhDK8Jxx3gs870dx/MOrvfsjuNQxk5n90nFxMqli5JxaCDe6UypahctqR38HfLTyqZ8+F2+/btnHbaaSQlJfHUU09RvXp1mjZtmh+77FvUCgUReQs352h5EVkP/AM3tzGqOg6YCVwBpAL7gVujFYsxpmjIzFS27zsU1IRz5CC/aXcaW7xlO/cf9rW9MqWSjzmbzzr4lylFpbIlKXeSO7s/HqrK1KlTufvuuxkyZAi3334711133XFtM6+iOfrophyeV+COaL2/MaZwOXAoI0wTzsGsM/7Nu9PYsucghzNy7nYsniRULB2+CSf47P6EEklR369169bRu3dvZs6cyQUXXECrVq2i/p6RJFzqbGNM4ZKRqWzfm5bVTh98dr85qBDYfTDd1/ZOObF4Vru9O5v3Dv6BZWVLcdqJJSh2nGf3+eGtt96iV69eZGRkMHLkSO68806SkqJfEEVihYIxJmr2paWHNOG4+1kH/90H2bInjYzMnM/uSyQVo1JZd3A/ugnnyP2KZUpSqnh8D6q5ceqpp9KiRQsmTJhA7dq14x0OkIBzNDdt2lRtkh1j4is9I5Ntew8d04SzKaQ5Z2+av7P7004q4Z3ZH92cUyno7P7UE4sjEv+z++ORnp7OiBEjOHToEAMHDgRcf0Is9ktEflDVHHutraZgjMmiquxNSz/m4qqjx98fZOueNHyc3FMyuVjIQb5k1kE+cNCvWKYkJZMT5+w+rxYtWkSPHj344YcfuPHGG7MKg4JW0FmhYEwRcTgjk6170oKacLwLrEI6b/cfyvC1vfInlziq3T64CSdw0C97QuKf3R+vtLQ0nnzySYYMGcJpp53Ge++9xw033FBgPxcrFIxJcKrK7gPpbN4T1ISzK3h0jisItu1Nw09r8QnFk7yz+5LHNOEE/lY4uSQlki3zvh8rVqzg2Wef5eabb+b555+nXLly8Q4pIisUjCnAQhOkuYuqjr66dvPuNA4czvnsXgQqlg66oKrs0SNyAsvLlEousGexiWLv3r18+OGHdO3alSZNmvDLL79Qp06deIflixUKxsSBqrJz/+Gss/vcJEgL56QSSUc14VQqW4pKpUsec3afnGRn99E2e/ZsevbsyZo1azjvvPNo1KhRwhQIYIWCMfkuvxOkBS6yOqoJ56iz+5KULlU8BntmItmxYwf3338/kyZNokGDBvznP/+hUaNG8Q4r16xQMManQIK0o3LlBHXQbtrlxtznNUFaaK6c4ARppmDLyMigVatW/Prrrzz88MMMGjSIUqVKxTusPLFCwRiOTZCWNcnJnrwnSHNNOMcmSAsUAn4SpJmCbdu2bVkJ7J5++mlq1KjBeecl9szC9qs0hVpwgrRNuw4edZAPbs7ZdSDvCdKCz+4rlS1J+ZNKFogUCiZ6VJUpU6Zwzz33MGTIEHr27Mm1114b77DyhRUKJmGFS5DmmnDyniAtML6+ojccM/Tq2lgkSDMF25o1a+jVqxezZs3iwgsvpE2bNvEOKV9ZoWAKnOAEae7sPu2YBGmbdh9kz3EkSAu9uragJEgzBdsbb7xBnz59UFVGjx5N3759KVascI3oskLBxFQghUJogrTgmazykiCtUpiDfiImSDMFW4UKFWjVqhXjx4+nZs2a8Q4nKqxQMPkiOEFaaJ6cvCRIK3dSCS8TZkiCtKDO28KQIM0UbIcPH2b48OEcPnyYxx57jI4dO9KhQ4dC/buzQsFEpKrsSUt3V9GGJEgLvtAqrwnSKpctRcXSJYtkgjRTsC1cuJAePXqwcOFCunTpUmAT2OU3KxSKsNAEacFNOLlNkCYC5U8u6YZdli51zNW1gTZ8S5BmCrqDBw/yxBNPMHToUMqXL8+//vUvrr/++niHFTNWKBRCgQRpm4KbcII7ar2Df54TpB0z/t6d7Re3FAqmEEhNTWXYsGHccsstDB8+nFNPPTXeIcVUxEJBRJoBfwVaA1WAA8AS4BPgTVXdE/UIzVHCJUg7ep5ad9A/eDjni6wCCdLcQf3YBGmBGa4sQZop7Pbu3cv06dPp1q0bTZo0Yfny5QVmJrRYy7ZQEJGPge3Ah8BwYAtQCmgAtAU+EZGhqvpxLAIt7AIJ0gIjcsK14W/efZDtPlMohEuQFjoM0xKkGQOzZs2iZ8+erFu3jqZNm9KoUaMiWyBA5JpCD1XdHLLsIDDPuz0rIhWjFlkhEi5BWrjx934SpCUVEyqcXNI7yB+bKydwwD/ZUigYE9H27dvp378/r7/+Og0bNuS///1vQiawy2/ZHjkCBYKI9AbeUtVdYdbZEsXYCrzgBGlZk5mEXF27efdBduz3l0IhXIK00ElOLEGaMccvkMAuNTWVgQMH8uijjyZsArv85ud0shawQES+Ayap6r+jG1LBkG2CtKDO2rwkSDv6IG8J0oyJpa1bt1KuXDmSkpJ49tlnqVmzJuecc068wypQRH0MPxGRYkAn4FbgbOAtXAGxOqrRhdG0aVOdP39+nl+f3wnSyp5Q/Eg7fZhcOZYgzZj4U1Vee+01+vfvz5AhQ+jVq1e8Q4o5EflBVZvmtJ6vU1NVzRSR1cBq4EzcSKQPRWSmqj58PIHG0sHDGXR64b+s2rYvx3VDE6QFJjOxBGnGJJbVq1fTs2dPZs+eTevWrWnbtm28QyrQciwURKQv0B3YDUwEBqpqmld7SAUSplD4fecBVm3bR1IxoX7Fk4/NlRM0yYklSDMm8U2ZMoU+ffogIowdO5ZevXoVugR2+c1PTaEa0EVVVwYv9GoPV0cnrOgIpGGoWe5EPruncKW7NcYcq1KlSrRp04Zx48ZRo0aNeIeTEPwUClVDCwQReU1Vu6vqkijFFRWZXv9JMbsQy5hC6fDhwwwdOpSMjAwGDRpEhw4d6NChQ7zDSih+6lFnBT/wmo2aRSec6AoUCklWKBhT6CxYsIBmzZrx6KOPsnz5cvwMojHHyrZQEJGHRGQHcJaI/OHddgDbgJkxizAfBXL0W5lgTOFx4MABBgwYQPPmzdm8eTPTp09n6tSplpoljyLVFIYCFYAR3t8KQHlVPU1VH/CzcRG5XESWi0iqiAwI83wNEflKRBaKyGIRuSIvO+FX4MTBmo+MKTxWrlzJ888/T/fu3Vm2bFmhmSs5XiL1KdRT1RUiMgVoHFgYKH1VdXGkDYtIEjAGuAxYD3wvIjNUdVnQao8C76rqSyKSgquB1MrLjviR1Xxko4qMSWi7d+9m2rRpdO/encaNG7NixYpCOxNarEUqFAYAPXAH9lAK5DR8pzmQGuikFpG3gWuA4EJBgTLe/bLA7z5izrNA85GVCcYkrpkzZ9K7d282bNhAixYtaNSokRUI+ShS7qMe3t/Wedz26cC6oMfrgRYh6wwGPheRfsBJwKXhNiQiPYGewHENKwsMSbXrD4xJPNu2bePee+/ljTfeICUlhTlz5lgCuyjIcfSRiCwQkQdEJLdFcbgjb+hwgJuA11S1GnAFMMUb3XT0i1QnqGpTVW1aoUKFXIZxhA1JNSYxBRLYvf322wwaNIgFCxZwwQUXxDusQsnPdQqdgb8AM0RkP/AO8J6qbsjhdeuB6kGPq3Fs81AP4HIAVf1WREoB5XFzN+S7zEwbkmpMItm8eTMVKlQgKSmJYcOGUbNmTc4666ycX2jyLMeagqr+pqpPq+rZwN+B84E1Prb9PVBfRGqLSAmgCzAjZJ21QHsAEWmEm8Rnay7iz5UMtSGpxiQCVWXixImcccYZTJgwAYCrrrrKCoQY8JUQT0SqATfiagzJwMCcXqOq6SJyJzALSMJlVV0qIk8A81V1BnAf8LKI3ItrWuquUbzixIakGlPwrVy5kttvv50vv/ySiy++mEsvDdvVaKLET0K8OUBp4D2gm6r+6nfjqjqTkAvdVHVQ0P1lQCvf0R4nG5JqTME2efJk+vbtS1JSEuPGjeP222+3BHYx5qem0CvRchxlx65oNqZgq1q1Ku3ateOll16iWrVq8Q6nSMq2UBCRm1T1LaCdiLQLfV5VR0U1sigINB9ZTcGYguHQoUMMGTKEzMxMBg8ezGWXXcZll10W77CKtEg1hVO9v+HGgCZkpqkjF69ZoWBMvH3//ff8/e9/Z8mSJXTr1g1VtXxFBUCki9fGenc/UdW5wc+JSEIOED5ynUKcAzGmCNu/fz+DBg1ixIgRVKlShRkzZnDVVVfFOyzj8dODMzbMsnCpLwq8TBt9ZEzcrVq1itGjR3P77bezdOlSKxAKmEh9Cs2BlkAFEbkr6KkyQPFoBxYNdkWzMfGxa9cupk2bxq233krjxo1JTU2levXqOb/QxFykmsJJuKuLkzmSOrsCcAh3lXPCsSGpxsTeJ598QuPGjbntttv45ZdfAKxAKMAi9Sl8BXwlIq+GTseZqGxIqjGxs3XrVu655x7efPNNmjRpwrRp02jYsGG8wzI5iNR8NFxV7wOGi8gxo41U9fqoRhYFdkWzMbGRkZHBRRddxKpVq3j88ccZMGAAJUqUiHdYxodIQ1Lf8f6+GItAYsGaj4yJrk2bNlGxYkWSkpIYPnw4tWrVokmTJvEOy+RCtn0KqjrP+/tF4AbMBzZ69xOONR8ZEx2ZmZmMHz+eBg0aMH78eACuvPJKKxASkJ/5FL4QkTIicirwE/CmiDwX/dDyX9YVzVYqGJNvUlNTad++Pb1796ZZs2Z07Ngx3iGZ4+DnOoXTVHU3cD0wWVXPARLyW8+wIanG5KtXX32VM888kwULFvDyyy/z73//mzp16sQ7LHMc/BQKySJSATcM9aMoxxNVWdcpWJ+CMfmiRo0adOzYkWXLlnHbbbdZmopCwE+W1KeA/wD/U9V5IlIHWBXdsKIjM9PSXBhzPNLS0njmmWfIzMzkiSeeoH379rRv3z7eYZl85GfmtbdVNUVVe3qPV6rqNdEPLf9Zmgtj8u67777j/PPP5/HHH2ft2rVEcT4sE0d+Jtkpj5uGs1bw+oFCIpHYkFRjcm/fvn089thjjBw5ktNPP52PP/6YP/3pT/EOy0SJn+ajD4G5wP+AjOiGE102JNWY3FuzZg1jx46ld+/eDBkyhDJlysQ7JBNFfgqFk7wrmxOeDUk1xp+dO3fy/vvvc9ttt5GSkkJqaqrNhFZE+Bl99KmIdIh6JDGQYaOPjMnRhx9+SEpKCr17985KYGcFQtHhp1DoDXwmIntF5A8R2SEif0Q7sGgI9ClYRcGYY23ZsoUuXbpw7bXXUqFCBebOnWsJ7IogP81H5aMeRYxY85Ex4WVkZNCqVSvWrl3Lk08+yYMPPkjx4gk5bYo5TjkWCqqaISJdgDqq+rSIVAMqAT9EPbp8ZnM0G3O033//ncqVK5OUlMQLL7xArVq1SElJiXdYJo785D56EWgLdPMW7QfGRTOoaLErmo1xMjMzeemll2jYsCHjxrl/5yuuuMIKBOOrT+FCVe0FHARQ1T+AhEyMblc0GwO//vorbdu2pW/fvrRo0YJOnTrFOyRTgPgpFA6LSDFAAUSkHJAZ1aiiJNP6FEwRN3HiRM4++2wWL17MpEmT+Pzzz6ldu3a8wzIFiJ9CYQzwL6CCiDyOu4jt2ahGFSU2JNUUdbVq1aJTp04sW7aMW2+91RLYmWP46Wh+XUR+AC71FnVW1SXRDSs6bEiqKWrS0tL45z//CcCTTz5pCexMjrKtKYhIKRFJAlDVpcAnuGajhE2WbkNSTVHyf//3f5xzzjk89dRTbNy40RLYGV8iNR/NAuoCiEhdYB6QAvQXkadiEFu+syGppijYu3cvd999Nxd8B49XAAAgAElEQVRddBH79+/ns88+Y+LEidZUZHyJVCicpqq/evf/Brytqn1ws65d7WfjInK5iCwXkVQRGZDNOjeKyDIRWSoib+Yq+lyyIammKFi7di3jx4/njjvuYMmSJTY9psmVSH0KwXXNdsBwAFVNE5EcRx95TU9jgMuA9cD3IjJDVZcFrVMfeBhopao7RKRiHvbBNxuSagqrHTt28N5779GzZ09SUlJYuXIlVatWjXdYJgFFqiksFZEhItIPaAB8DiAiZQE/h9XmQKo3Kc8h4G0gdHKe24ExqroDQFW35HYHcsMm2TGF0fTp00lJSaFv374sX74cwAoEk2eRCoXbgL1AQ+ByVd3nLW8CPO9j26cD64Ier/eWBWsANBCROSIyV0QuD7chEekpIvNFZP7WrVt9vHV41nxkCpNNmzbRuXNnrr/+eipXrsy8efM444wz4h2WSXDZNh95hcCTYZbPAeb42Ha4I2/o8IdkoD5wCVAN+K+INFHVnSHvOQGYANC0adM8D6HIKhSsTDAJLiMjg9atW7Nu3Tqefvpp7r//fktgZ/JFtoWCiHwAjAdmq2p6yHM1cZ3P61V1UjabWA9UD3pcDfg9zDpzVfUwsEpEluMKie9ztRc+ZXo9ITYk1SSq9evXU7VqVZKSkhg1ahS1a9e29NYmX0VqProD10n8q4h8KyIzRORzEUkFXgWWRigQwB3Y64tIbREpAXQBZoSs8wEu2V5gLugGwMo87kuOsq5otkLBJJjMzExGjx5Nw4YNeemllwDo1KmTFQgm30VqPtoA9Mddl1APqAIcAJar6p6cNqyq6SJyJ+56hyRgkqouFZEngPmqOsN7roOILMPN//yAqm4/7r3KhvUpmET0yy+/cNtttzFnzhw6duzIlVdeGe+QTCHmZ5IdVDUVSM3txlV1JjAzZNmgoPuKV/Dkdtt5YUNSTaJ55ZVXuPPOOznxxBOZPHky3bp1s4vQTFT5KhQKCxuSahJN3bp1ueqqq3jxxRepVKlSvMMxRUARKxSs+cgUbAcPHuSJJ54A4Omnn6Zt27a0bds2zlGZosRP6mxEpITXr5DQbEiqKcjmzJnDOeecwzPPPMPWrVstgZ2JCz/Tcf4J+AmY7T0+R0SmRzuwaLAhqaYg2rNnD/369aN169akpaUxa9YsXn75Zes7MHHhp6bwBNAC2Amgqj8CCVlryMiaT8H+2UzBsX79el555RX69evHTz/9RIcOHeIdkinC/PQpHFbVnSEH0oSs16o1H5kCYvv27bz77rv06dOHRo0asXLlSqpUqRLvsIzxVVP4WURuBIp5F6KNBOZGOa6oyJqj2UoFEyeqyvvvv09KSgp33XVXVgI7KxBMQeGnULgTOB8369o04CBwdzSDihabZMfE08aNG7nhhhvo3Lkz1atXZ/78+ZbAzhQ4fpqPOqrqQ8BDgQUicj2ugEgoNiTVxEsggd2GDRsYOnQo9957L8nJRWpEuEkQfn6Vj3JsATAwzLICz4akmlhbt24dp59+OklJSYwZM4batWvToEGDeIdlTLaybT4SkY4iMgI4XUSeD7q9gmtKSjg2JNXESkZGBqNGjToqgV3Hjh2tQDAFXqSawhZgCa4PYWnQ8j1A2PmWC7pMG5JqYuDnn3+mR48efPvtt3Tq1Imrrroq3iEZ41ukLKkLgYUiMlVVD8Ywpqix5iMTbRMmTKBfv36ULl2aKVOm0LVrVzsJMQnFT5/C6SLyFJAClAosVNWEqwfbkFQTbfXr1+e6665j1KhRVKxYMd7hGJNrfgqF13DTcg4DOgG3kqB9CoEhqXbmZvLLgQMHGDx4MCLCkCFDLIGdSXh+rlM4UVVnAajqb6r6KN5saYkmcEWz1RRMfvjmm284++yzGTp0KLt27bIEdqZQ8FMopIk7tf5NRHqLyFVAQtaLM6xPweSD3bt307dvXy6++GIyMjL44osveOmll6wGagoFP4XCvcDJwF1AK+B24O/RDCpaAkNS7Ypmczx+//13XnvtNfr378/ixYtp165dvEMyJt/k2Kegqt95d/cA3QBEpFo0g4qWI6OPrFAwubNt2zbeffdd+vbtS8OGDVm1apXNhGYKpYg1BRFpJiLXikh573FjEXmdhE2IF0hzEedATMJQVd555x1SUlK45557+PXXXwGsQDCFVqQrmp8BpgJdgc9EZCDwFbAISLjhqBA0JNVqCsaH33//nWuvvZYuXbpQs2ZNfvjhB7si2RR6kZqPrgHOVtUDInIa8Lv3eHlsQst/mTYk1fiUkZFBmzZt2LBhA8OGDePuu++2BHamSIj0Kz+oqgcAVPUPEfklkQsEsCuaTc7WrFlDtWrVSEpKYuzYsdSpU4d69RJyokFj8iRS63odEZnm3aYDtYIeJ1yGVLArmk32MjIyeP7552nUqFFWArsOHTpYgWCKnEg1hRtCHr8YzUBiwSbZMeEsWbKEHj16MG/ePK688kquvfbaeIdkTNxESoj3RSwDiQW1SXZMiHHjxnHXXXdRtmxZ3nzzTbp06WJ9TqZIK1KDM+2KZhMQOEFo1KgRnTt3ZtmyZdx0001WIJgir0gNp7AhqWb//v0MGjSIpKQknn32WS6++GIuvvjieIdlTIHhu6YgIiWjGUgs2JDUou3rr7/mrLPOYvjw4ezdu9cS2BkTRo6Fgog0F5GfgBXe47NFZHTUI4sCG5JaNO3atYtevXplpbT+8ssvGTNmjJ0cGBOGn5rCKOBKYDuAqi4iQVNn25DUomnjxo288cYb3H///SxevNjmOzAmAj+FQjFVXROyLMPPxkXkchFZLiKpIpLtvM4i8mcRURFp6me7eWXNR0XH1q1bGT3aVWgbNmzI6tWree655zjxxBPjHJkxBZufQmGdiDQHVESSROQe4NecXiQiScAY3GxtKcBNIpISZr3SuLTc34U+l98ybZKdQk9VefPNN2nUqBH33XdfVgK7ChUqxDkyYxKDn0KhD9AfqAFsBi7wluWkOZCqqitV9RDwNi6fUqh/AkOBg74iPg42JLVwW7duHVdddRVdu3alXr16LFy40BLYGZNLfoakpqtqlzxs+3RgXdDj9UCL4BVE5Fyguqp+LCL3Z7chEekJ9ASoUaNGHkJxAn0KdkVz4ZOens4ll1zCpk2bGDFiBP369SMpKSneYRmTcPwUCt+LyHLgHWCaqu7xue1wR96sMYAiUgwYAXTPaUOqOgGYANC0adM8jyNUm2Sn0Fm9ejXVq1cnOTmZ8ePHU6dOHerUqRPvsIxJWDk2H6lqXeBJ4HzgJxH5QET81BzWA9WDHlfDpd8OKA00Ab4WkdW4ZqkZ0exsPpL7KFrvYGIlPT2dYcOG0ahRI8aOHQvApZdeagWCMcfJ18Vrqvp/qnoXcB6wGzf5Tk6+B+qLSG0RKQF0AWYEbXOXqpZX1VqqWgs3m9vVqjo/tzvhlw1JLRwWL15My5YteeCBB+jYsSM33BCau9EYk1d+Ll47WUS6ishHwDxgK3BhTq9T1XTgTmAW8DPwrqouFZEnROTq44w71wLDUcGGpCaysWPHcv7557NmzRreeecdpk+fTtWqVeMdljGFhp8+hSXAR8BQVf1vbjauqjOBmSHLBmWz7iW52XZu2XDUxKaqiAhNmjShS5cujBgxgvLly8c7LGMKHT+FQh1VzYx6JFF2ZORRfOMwubNv3z4effRRkpOTee6552jTpg1t2rSJd1jGFFrZNh+JyHDv7r+CZ1xL1JnXAjUFazpKHF988QVnnnkmI0eOJC0tzRLYGRMDkWoK73h/E37GNQhqPrJCocDbuXMn999/PxMnTqR+/fp88803tG7dOt5hGVMkZFtTUNV53t1GqvpF8A1oFJvw8o8NR00cmzdv5u233+ahhx5i0aJFViAYE0N+hqT+PcyyHvkdSLRl9SlYqVAgbd68mRdeeAGAM844g9WrVzNkyBBOOOGEOEdmTNGSbfORiPwFd21B7ZA+hNLAzmgHlt8yM+1q5oJIVZk6dSp33303e/fu5YorrqB+/fo2ssiYOInUpzAPN4dCNVy204A9wMJoBhUNNsFOwbN27Vp69+7Np59+SsuWLbP6EIwx8ZNtoaCqq4BVwL9jF0702NXMBUsggd2WLVsYNWoUffv2tQR2xhQAkZqP/qOqF4vIDoIS2eES3amqnhb16PKRDUktGFauXEnNmjVJTk7m5Zdfpm7dutSqVSveYRljPJE6mgNzFpYHKgTdAo8Tig1Jja/09HSeffZZUlJSGDPGtUa2b9/eCgRjCphIQ1IDVzFXB5JUNQNoCfQCTopBbPnKhqTGz48//kiLFi0YMGAAV1xxBZ07d453SMaYbPgZkvoBbirOusDruGsU3oxqVFGgNiQ1Ll588UWaNWvGhg0beP/995k2bRpVqlSJd1jGmGz4KRQyVfUwcD0wUlX74WZVSyiZNsFOTAVSUpx11ll07dqVZcuWWYprYxKAr+k4RaQz0A241ltWPHohRYc1H8XG3r17GThwIMWLF2fYsGGWwM6YBOP3iua2uNTZK0WkNvBWdMPKf3ZFc/R9/vnnNGnShNGjR3P48GFLYGdMAvIzHecS4C5gvog0BNap6lNRjyyfWfNR9OzYsYNbb72Vjh07UqpUKb755hteeOEFG/5rTALyM/NaayAVmAhMAn4VkVbRDiy/2ZDU6NmyZQvvv/8+Dz/8MD/++CMXXXRRvEMyxuSRnz6FEcAVqroMQEQaAVOAptEMLL8F+hSsTMgfmzZt4q233uLee+/NSmBXrly5eIdljDlOfvoUSgQKBABV/RkoEb2QoiNrSKqVCsdFVZk8eTIpKSk8/PDDrFixAsAKBGMKCT+FwgIRGS8iF3m3l0jghHiW+yjvVq9ezeWXX0737t1JSUnhxx9/tAR2xhQyfpqPeuM6mh/E5T36BhgdzaCiwYakHp/09HTatm3Ltm3bGDNmDL1796ZYMT/nFMaYRBKxUBCRM4G6wHRVHRqbkKLDhqTmTWpqKrVr1yY5OZlJkyZRp04datasGe+wjDFRku2pnog8gktx0RWYLSLhZmBLGDYkNXcOHz7M008/TePGjbMS2LVt29YKBGMKuUg1ha7AWaq6T0QqADNxQ1ITUmDmNRuSmrMFCxbQo0cPfvzxRzp37sxf/vKXeIdkjImRSI3Caaq6D0BVt+awboEXaD6yMiGyUaNG0bx5czZt2sS0adN49913qVSpUrzDMsbESKSaQp2guZkFqBs8V7OqXh/VyPKZNR9FpqqICOeeey633HILw4cP59RTT413WMaYGItUKISmtHwxmoFEmw1JDW/Pnj08/PDDlCxZkuHDh9O6dWtat24d77CMMXESaY7mL2IZSLTZFc3H+uyzz+jVqxfr1q3jnnvuyaotGGOKroTuJ8iNwBXNVlOA7du387e//Y1OnTpx0kknMWfOHJ5//nkrEIwxRadQOHLxmh34tm/fzvTp03nsscdYuHAhLVu2jHdIxpgCwnehICIlc7txEblcRJaLSKqIDAjzfH8RWSYii0XkCxGJ2iD4Ix3N0XqHgm3jxo0MGzYMVaVBgwasWbOGJ554gpIlc/21GmMKMT+ps5uLyE/ACu/x2SKSY5oLEUkCxgCdgBTgJhFJCVltIdBUVc8C3geidtV0ZhFNiKeqTJo0iUaNGvHYY4+RmpoKYCOLjDFh+akpjAKuBLYDqOoi3ExsOWkOpKrqSlU9BLwNXBO8gqp+par7vYdzgWp+A8+tojgkddWqVXTo0IEePXpw9tlns2jRIktgZ4yJyE9CvGKquiakEzLDx+tOB9YFPV4PtIiwfg/g03BPiEhPoCdAjRo1fLz1sYrakNT09HTatWvH9u3beemll+jZs6clsDPG5MhPobBORJoD6jUJ9QN+9fG6cEffsJP2ishfcZP2XBzueVWdAEwAaNq0aZ4m/i0qQ1JXrFhBnTp1SE5O5tVXX6Vu3bpUr1493mEZYxKEn1PHPkB/oAawGbjAW5aT9UDw0aga8HvoSiJyKTAQuFpV03xsN08K+yQ7hw8f5sknn6RJkya8+KK7zvCSSy6xAsEYkys51hRUdQvQJQ/b/h6oLyK1gQ3eNm4OXkFEzgXGA5d77xM1hbn5aP78+fTo0YPFixfTpUsXbrrppniHZIxJUDkWCiLyMmGafVS1Z6TXqWq6iNwJzAKSgEmqulREngDmq+oM4DngZOA9r89irapenfvdyFlhbT564YUX6N+/P5UrV+bDDz/k6quj8vEZY4oIP30K/w66Xwq4jqM7kLOlqjNxKbeDlw0Kun+pn+3kh6wrmgtJqRBISdG0aVN69OjB0KFDOeWUU+IdljEmwflpPnon+LGITAFmRy2iKMkoJENSd+/ezUMPPUSpUqUYMWIErVq1olWrVvEOyxhTSORljGJtIOGm38q6TiGB+xRmzpxJ48aNmTBhAsnJyajmaSCWMcZky0+fwg6O9CkUA/4AjklZUdAduaI5vnHkxbZt27jnnnuYOnUqjRs35v3336dFi0iXfBhjTN5ELBTE9f6ejRs9BJCpCXp6mpnACfF27NjBRx99xD/+8Q8eeeQRSpQoEe+QjDGFVMRCQVVVRKar6vmxCihaEm1I6oYNG5g6dSoPPPAA9evXZ82aNdaRbIyJOj99CvNE5LyoRxJliTIkVVV5+eWXSUlJYfDgwfz2228AViAYY2Ii20JBRAK1iItwBcNyEVkgIgtFZEFswss/iTAk9bfffqN9+/b07NmT8847j8WLF1OvXr14h2WMKUIiNR/NA84Dro1RLFGVUcBHH6Wnp9O+fXv++OMPxo8fz2233WYJ7IwxMRepUBAAVf0tRrFEVaBPoaBVFJYvX07dunVJTk5m8uTJ1K1bl2rVopZB3BhjIopUKFQQkf7ZPamqz0chnqgpaM1Hhw4d4plnnuGpp57iueee4+677+bii8MmiTXGmJiJVCgk4fISFYyj6HEqSHM0z5s3jx49erBkyRJuvvlmunbtGu+QjDEGiFwobFTVJ2IWSZQVlCuaR44cyX333UeVKlX46KOPuPLKK+MajzHGBIvUkxn/U+p8dOTitfi8f+Cav+bNm3P77bezdOlSKxCMMQVOpJpC+5hFEQOZcepT2LVrFw8++CAnnHACI0eO5MILL+TCCy+MaQzGGONXtjUFVf0jloFEWzyajz766CNSUlJ45ZVXKFmypCWwM8YUeEVmIHxGDIekbt26lZtvvpmrr76acuXKMXfuXJ599lmkAHRyG2NMJEWmUIjlkNRdu3Yxc+ZMHn/8cebPn0+zZs2i/p7GGJMf/My8VihEe0jqunXreOONNxgwYAD16tVjzZo1lC1bNirvZYwx0VJkagrR6lPIzMxk3LhxNG7cmCeffDIrgZ0VCMaYRFR0CoUoDEldsWIF7dq1o0+fPjRv3pyffvrJEtgZYxJakWk+OjLzWv6UCunp6Vx22WXs3LmTiRMncuutt1pHsjEm4RWhQiF/mo9+/vln6tevT3JyMlOmTKFu3bpUrVo1P0I0xpi4KzrNR3p8zUdpaWn84x//4KyzzuLFF18EoHXr1lYgGGMKlaJTU8h0f/MyJHXu3Ln06NGDZcuW0a1bN7p165bP0RljTMFQZGoKWZPs5LJQGD58OBdeeCF79uxh5syZvP7665QrVy4aIRpjTNwVmUIht30KmV7VomXLlvTu3ZslS5bQqVOnqMVnjDEFQZFpPtKs0UeR19u5cyf33XcfJ554IqNHj7YEdsaYIqXI1BT8XNH8wQcfkJKSwuTJkyldurQlsDPGFDlFplCI1Hy0ZcsWbrzxRq677joqVarEvHnzePrpp+26A2NMkVP0CoUwx/ndu3cze/ZsnnrqKebNm8d5550X4+iMMaZgKDJ9CqFDUteuXcuUKVN45JFHqFevHmvXrqV06dJxjNAYY+IvqjUFEblcRJaLSKqIDAjzfEkRecd7/jsRqRWtWAI1BVVl7NixNG7cmKeffjorgZ0VCMYYE8VCQUSSgDFAJyAFuElEUkJW6wHsUNV6wAjg2WjFk6nK4e3reejv13PHHXfQsmVLli5dagnsjDEmSDRrCs2BVFVdqaqHgLeBa0LWuQaY7N1/H2gvUerdTU9PZ/O7g1i94hdeffVVZs2aRa1ataLxVsYYk7CiWSicDqwLerzeWxZ2HVVNB3YBx1wuLCI9RWS+iMzfunVrnoIpc2Ip6nQewOsz/0f37t1tZJExxoQRzY7mcEfd0IH/ftZBVScAEwCaNm2ap4sHRt10Ltx0bl5eaowxRUY0awrrgepBj6sBv2e3jogkA2WBP6IYkzHGmAiiWSh8D9QXkdoiUgLoAswIWWcG8Dfv/p+BL9UuIzbGmLiJWvORqqaLyJ3ALCAJmKSqS0XkCWC+qs4AJgJTRCQVV0PoEq14jDHG5CyqF6+p6kxgZsiyQUH3DwKdoxmDMcYY/4pMmgtjjDE5s0LBGGNMFisUjDHGZLFCwRhjTBZJtBGgIrIVWJPHl5cHtuVjOInA9rlosH0uGo5nn2uqaoWcVkq4QuF4iMh8VW0a7zhiyfa5aLB9Lhpisc/WfGSMMSaLFQrGGGOyFLVCYUK8A4gD2+eiwfa5aIj6PhepPgVjjDGRFbWagjHGmAisUDDGGJOlUBYKInK5iCwXkVQRGRDm+ZIi8o73/HciUiv2UeYvH/vcX0SWichiEflCRGrGI878lNM+B633ZxFREUn44Yt+9llEbvS+66Ui8masY8xvPn7bNUTkKxFZ6P2+r4hHnPlFRCaJyBYRWZLN8yIio7zPY7GInJevAahqobrh0nT/BtQBSgCLgJSQdfoC47z7XYB34h13DPa5LXCid79PUdhnb73SwDfAXKBpvOOOwfdcH1gInOo9rhjvuGOwzxOAPt79FGB1vOM+zn1uA5wHLMnm+SuAT3EzV14AfJef718YawrNgVRVXamqh4C3gWtC1rkGmOzdfx9oL4k9aXOO+6yqX6nqfu/hXNxMeInMz/cM8E9gKHAwlsFFiZ99vh0Yo6o7AFR1S4xjzG9+9lmBMt79shw7w2NCUdVviDwD5TXA6+rMBU4RkSr59f6FsVA4HVgX9Hi9tyzsOqqaDuwCysUkuujws8/BeuDONBJZjvssIucC1VX141gGFkV+vucGQAMRmSMic0Xk8phFFx1+9nkw8FcRWY+bv6VfbEKLm9z+v+dKVCfZiZNwZ/yh4279rJNIfO+PiPwVaApcHNWIoi/iPotIMWAE0D1WAcWAn+85GdeEdAmuNvhfEWmiqjujHFu0+Nnnm4DXVHW4iLTEzebYRFUzox9eXET1+FUYawrrgepBj6txbHUyax0RScZVOSNV1wo6P/uMiFwKDASuVtW0GMUWLTntc2mgCfC1iKzGtb3OSPDOZr+/7Q9V9bCqrgKW4wqJROVnn3sA7wKo6rdAKVziuMLK1/97XhXGQuF7oL6I1BaREriO5Bkh68wA/ubd/zPwpXo9OAkqx332mlLG4wqERG9nhhz2WVV3qWp5Va2lqrVw/ShXq+r8+ISbL/z8tj/ADSpARMrjmpNWxjTK/OVnn9cC7QFEpBGuUNga0yhjawZwizcK6QJgl6puzK+NF7rmI1VNF5E7gVm4kQuTVHWpiDwBzFfVGcBEXBUzFVdD6BK/iI+fz31+DjgZeM/rU1+rqlfHLejj5HOfCxWf+zwL6CAiy4AM4AFV3R6/qI+Pz32+D3hZRO7FNaN0T+STPBF5C9f8V97rJ/kHUBxAVcfh+k2uAFKB/cCt+fr+CfzZGWOMyWeFsfnIGGNMHlmhYIwxJosVCsYYY7JYoWCMMSaLFQrGGGOyWKFQRIlIhoj8GHSrFWHdWtllbMzle37tZbtc5KVhOCMP2+gtIrd497uLSNWg514RkZR8jvN7ETnHx2vuEZET8/BeI0WkjXf/Ti/zpXrXGOR2W2d4sf8oIj+LSL7O0iUiVweylIpIBXEZhheKSGsRmSkip0R4bbbfW4TX/FtETs2/PTC+xDsjoN3icwP25mLdWmSTsTGX7/k1XqZSoCcwI7+2l8+fTXCctwKzfbxmNVA+l+9zGjA36PG53med6215r58FXBP0+Mwo/n66AJOj+b3hLjAdGK19sFv4m9UUTBavRvBfEVng3S4Ms05jEZnnnY0uFpH63vK/Bi0fLyJJObzdN0A977XtvTPOn8Tlki/pLR8iR+aAGOYtGywi94vIn3E5nKZ673mCd5bcVET6iMjQoJi7i8joPMb5LUHJxkTkJRGZL26ugse9ZXcBVYGvROQrb1kHEfnW+xzfE5GTw2z7z8BngQequlBVV+cQTyRVcCkQAtv7yYulu4h8KCKfeTWgfwTtT9jPQ9wcBgu82tIXQdt50as5DQWuCPrsVwdqNyJyi/edLRKRKd6y7L63P4nI9KB4LhORad7DGbi8RiaW4l0q2S0+N9zVrj96t+neshOBUt79+rgrRiGopgCMBrp690sAJwCNgI+A4t7yscAtYd7za46cgT8AvINLSbAOaOAtfx24B3cWvZwjF1ie4v0dDNwfur3gx0AFXLrlwPJPgYvyGOc9wNNBz53m/U3y1jvLe7wa7+wel3fnG+Ak7/FDwKAw7zMZuCrM8qxt5fI7vRWX8fdT4N6gz6w7sBGXCfgEYIn3OYX9PLzPbx1QO2SfuwMvht4Pjhlo7H1v5UNeG/Z7wyV3+wWo4D1+M/gzAVYA5eL9/1KUboUuzYXx7YCqhraVFwcCZ4IZuLw5ob4FBopINWCaqq4QkfbA+cD34lJonABkl19pqogcwB1E+gFnAKtU9Vfv+cnAHcCLuDkQXhGRTwDf6a9VdauIrBSXF2aF9x5zvO3mJs6TcAf/4JmtbhSRnrgUMVVwk7osDnntBd7yOd77lMB9bqGqkI85elT1VRGZBVyOy7nfS0TO9p6erV66C+9M/CIgnfCfxwXAN+oS6qGquUkW2Q54X1W3+XmtqqpXm6GoQn4AAALJSURBVPiriLwKtMQVTAFbcLWwhE3VkWisUDDB7gU2A2fjBiEcMzGNqr4pIt8BfwJmichtuLO9yar6sI/36KpBSelEJOw8Fupy3jTHJTrrAtyJO+D49Q5wI+4sdLp38MlVnLhZvoYAY4DrRaQ2cD/QTFV3iMhruJpOKMEdhHNq+jiQzeuz5R04zwV+V9Vjpp1U1d+BScAkcYMDmgSeCl2VbL43Ebk6zPq+Q8zDa1/F1VgOAu+pm+MkoBTuczIxYn0KJlhZYKO6PPTdcGfJRxGROsBKVR2Fa/M9C/gC+LOIVPTWOU38zwH9C1BLROp5j7sB//Ha4Muq6kxcE064EUB7cCmyw5kGXItrk37HW5arOFX1MPAocIG47JtlgH3ALhGpBHTKJpa5QKvAPonIiSISrtb1M16/il+qequqnhOuQPD6AYp79yvjmos2eE9f5u3vCbjPZQ7Zfx7fAhd7hSAiclouQvwCV5sqF+G1R31vXkH2O+6zfi1ofwSojKtVmhixQsEEGwv8TUTm4pqO9oVZ5y/AEhH5EWiImxZwGe4f+nMRWQzMxjWN5EhVD+Lawt8TkZ+ATGAc7qDxsbe9/+BqMaFeA8YFOjtDtrsDWAbUVNV53rJcx6mqB4DhuPbwRbj5j5fizsbnBK06AfhURL5S1a24Nve3vPeZi/usQn2Cy4YJuA5rcVkxqwGLReSVSLGF0QH33SzCjUR6QFU3ec/9D5iC60P6l6rOz+7z8OLvCUzztvVO6BtlR1WXAk/hCvZFwPNhVnuNY7+3qcA6L6aA83Gjs9JDN2Cix7KkGhNHIvI/4EqN4sxoItId17F7Z7Te43iJyIvAQlWdGLTsBdyw5S/iF1nRYzUFY+LrPqBGvIOIJxH5AdcM+UbIU0usQIg9qykYY4zJYjUFY4wxWaxQMMYYk8UKBWOMMVmsUDDGGJPFCgVjjDFZ/h9FWtcX+DuN/wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot ROC Curve\n",
    "\n",
    "from sklearn.metrics import roc_curve\n",
    "\n",
    "fpr, tpr, thresholds = roc_curve(y_test, y_pred_test)\n",
    "\n",
    "plt.figure(figsize=(6,4))\n",
    "\n",
    "plt.plot(fpr, tpr, linewidth=2)\n",
    "\n",
    "plt.plot([0,1], [0,1], 'k--' )\n",
    "\n",
    "plt.rcParams['font.size'] = 12\n",
    "\n",
    "plt.title('ROC curve for Predicting a Pulsar Star classifier')\n",
    "\n",
    "plt.xlabel('False Positive Rate (1 - Specificity)')\n",
    "\n",
    "plt.ylabel('True Positive Rate (Sensitivity)')\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ROC curve help us to choose a threshold level that balances sensitivity and specificity for a particular context."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ROC  AUC\n",
    "\n",
    "\n",
    "**ROC AUC** stands for **Receiver Operating Characteristic - Area Under Curve**. It is a technique to compare classifier performance. In this technique, we measure the `area under the curve (AUC)`. A perfect classifier will have a ROC AUC equal to 1, whereas a purely random classifier will have a ROC AUC equal to 0.5. \n",
    "\n",
    "\n",
    "So, **ROC AUC** is the percentage of the ROC plot that is underneath the curve."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ROC AUC : 0.9171\n"
     ]
    }
   ],
   "source": [
    "# compute ROC AUC\n",
    "\n",
    "from sklearn.metrics import roc_auc_score\n",
    "\n",
    "ROC_AUC = roc_auc_score(y_test, y_pred_test)\n",
    "\n",
    "print('ROC AUC : {:.4f}'.format(ROC_AUC))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comments\n",
    "\n",
    "\n",
    "- ROC AUC is a single number summary of classifier performance. The higher the value, the better the classifier.\n",
    "\n",
    "- ROC AUC of our model approaches towards 1. So, we can conclude that our classifier does a good job in classifying the pulsar star."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cross validated ROC AUC : 0.9756\n"
     ]
    }
   ],
   "source": [
    "# calculate cross-validated ROC AUC \n",
    "\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "Cross_validated_ROC_AUC = cross_val_score(linear_svc, X_train, y_train, cv=10, scoring='roc_auc').mean()\n",
    "\n",
    "print('Cross validated ROC AUC : {:.4f}'.format(Cross_validated_ROC_AUC))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **19. Stratified k-fold Cross Validation with shuffle split** <a class=\"anchor\" id=\"19\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "k-fold cross-validation is a very useful technique to evaluate model performance. But, it fails here because we have a imbalnced dataset. So, in the case of imbalanced dataset, I will use another technique to evaluate model performance. It is called `stratified k-fold cross-validation`.\n",
    "\n",
    "\n",
    "In `stratified k-fold cross-validation`, we split the data such that the proportions between classes are the same in each fold as they are in the whole dataset.\n",
    "\n",
    "\n",
    "Moreover, I will shuffle the data before splitting because shuffling yields much better result."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Stratified k-Fold Cross Validation with shuffle split with  linear kernel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "\n",
    "\n",
    "kfold=KFold(n_splits=5, shuffle=True, random_state=0)\n",
    "\n",
    "\n",
    "linear_svc=SVC(kernel='linear')\n",
    "\n",
    "\n",
    "linear_scores = cross_val_score(linear_svc, X, y, cv=kfold)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Stratified cross-validation scores with linear kernel:\n",
      "\n",
      "[0.98296089 0.97458101 0.97988827 0.97876502 0.97848561]\n"
     ]
    }
   ],
   "source": [
    "# print cross-validation scores with linear kernel\n",
    "\n",
    "print('Stratified cross-validation scores with linear kernel:\\n\\n{}'.format(linear_scores))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average stratified cross-validation score with linear kernel:0.9789\n"
     ]
    }
   ],
   "source": [
    "# print average cross-validation score with linear kernel\n",
    "\n",
    "print('Average stratified cross-validation score with linear kernel:{:.4f}'.format(linear_scores.mean()))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Stratified k-Fold Cross Validation with shuffle split with rbf kernel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "rbf_svc=SVC(kernel='rbf')\n",
    "\n",
    "\n",
    "rbf_scores = cross_val_score(rbf_svc, X, y, cv=kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Stratified Cross-validation scores with rbf kernel:\n",
      "\n",
      "[0.92541899 0.91201117 0.90167598 0.90835429 0.90472199]\n"
     ]
    }
   ],
   "source": [
    "# print cross-validation scores with rbf kernel\n",
    "\n",
    "print('Stratified Cross-validation scores with rbf kernel:\\n\\n{}'.format(rbf_scores))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average stratified cross-validation score with rbf kernel:0.9104\n"
     ]
    }
   ],
   "source": [
    "# print average cross-validation score with rbf kernel\n",
    "\n",
    "print('Average stratified cross-validation score with rbf kernel:{:.4f}'.format(rbf_scores.mean()))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comments\n",
    "\n",
    "\n",
    "I obtain higher average stratified k-fold cross-validation score of 0.9789 with linear kernel but the model accuracy is 0.9832.\n",
    "So, stratified cross-validation technique does not help to improve the model performance."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **20. Hyperparameter Optimization using GridSearch CV** <a class=\"anchor\" id=\"20\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "             estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "                           decision_function_shape='ovr', degree=3,\n",
       "                           gamma='auto_deprecated', kernel='rbf', max_iter=-1,\n",
       "                           probability=False, random_state=None, shrinking=True,\n",
       "                           tol=0.001, verbose=False),\n",
       "             iid='warn', n_jobs=None,\n",
       "             param_grid=[{'C': [1, 10, 100, 1000], 'kernel': ['linear']},\n",
       "                         {'C': [1, 10, 100, 1000],\n",
       "                          'gamma': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,\n",
       "                                    0.9],\n",
       "                          'kernel': ['rbf']},\n",
       "                         {'C': [1, 10, 100, 1000], 'degree': [2, 3, 4],\n",
       "                          'gamma': [0.01, 0.02, 0.03, 0.04, 0.05],\n",
       "                          'kernel': ['poly']}],\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='accuracy', verbose=0)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import GridSearchCV\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "\n",
    "# import SVC classifier\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "\n",
    "# instantiate classifier with default hyperparameters with kernel=rbf, C=1.0 and gamma=auto\n",
    "svc=SVC() \n",
    "\n",
    "\n",
    "\n",
    "# declare parameters for hyperparameter tuning\n",
    "parameters = [ {'C':[1, 10, 100, 1000], 'kernel':['linear']},\n",
    "               {'C':[1, 10, 100, 1000], 'kernel':['rbf'], 'gamma':[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]},\n",
    "               {'C':[1, 10, 100, 1000], 'kernel':['poly'], 'degree': [2,3,4] ,'gamma':[0.01,0.02,0.03,0.04,0.05]} \n",
    "              ]\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "grid_search = GridSearchCV(estimator = svc,  \n",
    "                           param_grid = parameters,\n",
    "                           scoring = 'accuracy',\n",
    "                           cv = 5,\n",
    "                           verbose=0)\n",
    "\n",
    "\n",
    "grid_search.fit(X_train, y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GridSearch CV best score : 0.9793\n",
      "\n",
      "\n",
      "Parameters that give the best results : \n",
      "\n",
      " {'C': 10, 'gamma': 0.3, 'kernel': 'rbf'}\n",
      "\n",
      "\n",
      "Estimator that was chosen by the search : \n",
      "\n",
      " SVC(C=10, cache_size=200, class_weight=None, coef0=0.0,\n",
      "    decision_function_shape='ovr', degree=3, gamma=0.3, kernel='rbf',\n",
      "    max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
      "    tol=0.001, verbose=False)\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "\n",
    "\n",
    "# best score achieved during the GridSearchCV\n",
    "print('GridSearch CV best score : {:.4f}\\n\\n'.format(grid_search.best_score_))\n",
    "\n",
    "\n",
    "# print parameters that give the best results\n",
    "print('Parameters that give the best results :','\\n\\n', (grid_search.best_params_))\n",
    "\n",
    "\n",
    "# print estimator that was chosen by the GridSearch\n",
    "print('\\n\\nEstimator that was chosen by the search :','\\n\\n', (grid_search.best_estimator_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GridSearch CV score on test set: 0.9835\n"
     ]
    }
   ],
   "source": [
    "# calculate GridSearch CV score on test set\n",
    "\n",
    "print('GridSearch CV score on test set: {0:0.4f}'.format(grid_search.score(X_test, y_test)))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comments\n",
    "\n",
    "\n",
    "- Our original model test accuracy is 0.9832 while GridSearch CV score on test-set is 0.9835.\n",
    "\n",
    "\n",
    "- So, GridSearch CV helps to identify the parameters that will improve the performance for this particular model.\n",
    "\n",
    "\n",
    "- Here, we should not confuse `best_score_` attribute of `grid_search` with the `score` method on the test-set. \n",
    "\n",
    "\n",
    "- The `score` method on the test-set gives the generalization performance of the model. Using the `score` method, we employ a model trained on the whole training set.\n",
    "\n",
    "\n",
    "- The `best_score_` attribute gives the mean cross-validation accuracy, with cross-validation performed on the training set."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **21. Results and conclusion** <a class=\"anchor\" id=\"21\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "\n",
    "\n",
    "1. There are outliers in our dataset. So, as I increase the value of C to limit fewer outliers, the accuracy increased. This is true with different kinds of kernels.\n",
    "\n",
    "2.\tWe get maximum accuracy with `rbf` and `linear` kernel with C=100.0 and the accuracy is 0.9832. So, we can conclude that our model is doing a very good job in terms of predicting the class labels. But, this is not true. Here, we have an imbalanced dataset. Accuracy is an inadequate measure for quantifying predictive performance in the imbalanced dataset problem. So, we must explore `confusion matrix` that provide better guidance in selecting models. \n",
    "\n",
    "3.\tROC AUC of our model is very close to 1. So, we can conclude that our classifier does a good job in classifying the pulsar star.\n",
    "\n",
    "4.\tI obtain higher average stratified k-fold cross-validation score of 0.9789 with linear kernel but the model accuracy is 0.9832. So, stratified cross-validation technique does not help to improve the model performance.\n",
    "\n",
    "5.\tOur original model test accuracy is 0.9832 while GridSearch CV score on test-set is 0.9835. So, GridSearch CV helps to identify the parameters that will improve the performance for this particular model.\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **22. References** <a class=\"anchor\" id=\"22\"></a>\n",
    "\n",
    "[Table of Contents](#0.1)\n",
    "\n",
    "The work done in this project is inspired from following books and websites:-\n",
    "\n",
    "  1. Hands on Machine Learning with Scikit-Learn and Tensorflow by Aurélién Géron\n",
    "\n",
    "  2. Introduction to Machine Learning with Python by Andreas C. Müller and Sarah Guido\n",
    "\n",
    "  3. Udemy course – Machine Learning – A Z by Kirill Eremenko and Hadelin de Ponteves\n",
    "\n",
    "  4. Udemy course – Feature Engineering for Machine Learning by Soledad Galli\n",
    "\n",
    "  5. https://en.wikipedia.org/wiki/Support-vector_machine\n",
    "\n",
    "  6. https://www.datacamp.com/community/tutorials/svm-classification-scikit-learn-python\n",
    "\n",
    "  7. http://dataaspirant.com/2017/01/13/support-vector-machine-algorithm/\n",
    "\n",
    "  8. https://www.ritchieng.com/machine-learning-evaluate-classification-model/\n",
    "\n",
    "  9. https://en.wikipedia.org/wiki/Kernel_method\n",
    "\n",
    "  10. https://en.wikipedia.org/wiki/Polynomial_kernel\n",
    "\n",
    "  11. https://en.wikipedia.org/wiki/Radial_basis_function_kernel\n",
    "\n",
    "  12. https://data-flair.training/blogs/svm-kernel-functions/"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So, now we will come to the end of this kernel.\n",
    "\n",
    "I hope you find this kernel useful and enjoyable.\n",
    "\n",
    "Your comments and feedback are most welcome.\n",
    "\n",
    "Thank you\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Go to Top](#0)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
